WPF开发txt阅读器5:书籍管理系统,文件夹对话框

news2024/11/25 2:31:18

文章目录

    • 书柜类
    • 文件夹对话框
    • 验证

txt阅读器系列:

  • 需求分析和文件读写
  • 目录提取类💎列表控件与目录
  • 字体控件绑定

书柜类

任何小说阅读器,都免不了要有一个书架功能,而所谓书架,其实就是一个文件夹,通过对文件夹进行递归式地搜索,就可以找到所有txt文件,并进行统一管理。

所以,下面建立一个书柜类,其中必不可少的就是书柜的根目录。

internal class BookShelf
{
    string root;        //根目录
    string name;        //最上层的文件夹
    List<BookShelf> childs;
    string[] books;

    public BookShelf(string root)
    {
        init(root);
    }

    public void init(string root)
    {
        this.root = root;
        name = Path.GetFileName(root);
        foreach (var d in Directory.GetDirectories(root))
        {
            if (getAllChilds(d).Length == 0)
                continue;
            childs.Add(new BookShelf(d));
        }
        books = getAllChilds(root);
    }

    public string[] getAllChilds(string path)
    {
        return Directory
            .GetFiles(path, "*.txt", SearchOption.AllDirectories)
            .Select(f => Path.GetFileName(f))
            .ToArray();
    }

    public bool isBookShelf(string path)
    {
        var txts = Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories);
        return txts.Length > 0;
    }
}

其中,init是初始化函数,主要包括两个步骤,一是检索当前文件夹中是否还有文件夹,如果有文件夹,则判断这个文件夹是否有书籍,如果有书籍,就新增一个子书柜,否则跳过。

在检测完文件夹之后,再检测文件,通过getAllChilds,将所有txt为后缀的文件作为书籍加入其中。getAllChilds函数中,用到了这种比较现代的链式编程,第一步用Directory.GetFiles获取所有后缀为txt的路径,然后挑选这些文件,并返回这些文件的文件名,最后转换为数字形式。

文件夹对话框

考虑到大多数情况下,导入一个文件夹,都需要经过文件夹对话框,所以需要再写一个无参数输入的构造函数。但这里有一个问题,即WPF并不支持文件夹对话框,为了实现功能,需要在工具->nuget包管理器中下载,名字是FolderBrowserForWPF,然后就可以调用了,直须注意引用一下

using FolderBrowserForWPF;

然后再写一个构造函数

public BookShelf()
{
    var fbd = new Dialog();
    if (fbd.ShowDialog() != true)
        return;
    init(fbd.FileName);
}

验证

为了验证是否真的实现了这个书柜,需要重写一下ToString函数,用于打印书柜中所有的书籍

public string ToString()
{
    string info = $"{name}\r\n";
    if(childs != null)
        foreach (var bs in childs)
            info += $"{bs}\r\n";
    if(books != null)
        foreach (var book in books)
            info += $"-{book}\r\n";
    return info;
}

然后就可以在主窗口程序中调用这个功能了,首先为导入按钮添加btnLoadFolder_Click事件,

BookShelf bookShelf;

private void btnLoadFolder_Click(object sender, RoutedEventArgs e)
{
    bookShelf = new BookShelf();
    txtInfo.Text = bookShelf.ToString();
}

然后执行,效果如下

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/648311.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

postgre查询今天,昨天的数据

昨天数据 SELECT* FROMsys_device WHERE age(current_date,to_timestamp(substring(update_time FROM 1 FOR 10),yyyy-MM-dd)) 1 days; 今天数据 SELECT* FROMsys_device WHERE to_char(update_time:: DATE, yyyy-MM-DD hh 24: mi :s) to_char(CURRENT_DATE:: DATE, …

nodejs+vue+mysql汽车新闻资讯网站jtw43

本汽车资讯网站有管理员和用户。管理员功能有个人中心&#xff0c;用户管理&#xff0c;汽车品牌管理&#xff0c;价格分类管理&#xff0c;经销商管理&#xff0c;汽车信息管理&#xff0c;留言板管理&#xff0c;系统管理等。用户可以查看各种汽车信息&#xff0c;还可以进行…

无人机上仅使用CPU实时运行Yolov5(OpenVINO实现)(上篇)

Intel CPU在运行视觉导航等算法时实时性要优于Nvidia等平台&#xff0c;如Jetson Tx2&#xff0c;NX。而Nvidia平台在运行深度学习算法方面具有很大优势&#xff0c;两种平台各有利弊。但是&#xff0c;Intel OpenVINO的推出允许NUC平台实时运行深度学习模型&#xff0c;如目前…

Zookeeper 3.5.7

文章目录 1、Zookeeper 入门1.1 概述1.2 特点1.3 数据结构1.4 应用场景 2、本地安装2.1 本地模式安装2.2 配置参数解读 3、集群操作3.1 集群操作3.1.1 集群安装3.1.2 选举机制&#xff08;面试重点&#xff09;3.1.3 集群启停脚本 3.2 客户端命令行操作3.2.1 命令行语法3.2.2 z…

你没见过的黑科技,真会玩

很久之前分享过谷歌浏览器那些有趣的隐藏功能 &#xff0c;今天再分享几个浏览器黑科技。 第一个是这个项目https://github.com/zserge/awfice &#xff0c;利用data URI浏览器也可以当编辑器&#xff0c;输入data:text/html,<body contenteditable styleline-height:1.5;fo…

电力电子助力小米快充生态,磁材创新驱动未来无线充电

6月14日&#xff0c;第二届非晶合金材料在电力电子产业发展中的机遇与挑战研讨会于上海开幕。小米手机部工程师史学伟作为代表出席本次会议&#xff0c;并作《小米无线快充生态纳米晶合金材料应用及材料发展建议》主题报告&#xff0c;分享小米无线充电技术与产品应用&#xff…

【WinForm】C#实现商场收银软件,从面向过程到面向对象,设计模式的应用

文章目录 前言一、收银系统版本11、运行效果2、界面设计3、代码 二、收银系统版本21、运行效果2、界面设计3、代码&#xff1a; 三、收银系统版本31、运行效果2、界面设计3、代码 四、收银系统版本41、运行效果2、界面设计3、代码 总结面向对象23中设计模式总结设计模式关系图 …

C++类的成员变量和成员函数

类的成员变量和普通变量一样&#xff0c;也有数据类型和名称&#xff0c;占用固定长度的内存。但是在定义类的时候不能对成员变量赋值&#xff1b; 类的成员函数也和普通函数一样&#xff0c;都有返回值和参数列表&#xff0c;它与一般函数的区别是&#xff0c;成员函数是一个…

OpenAI深夜放毒:发布GPT-4新模型,GPT-3.5支持16K上下文,并且价格降低75%

一觉起来&#xff0c;发现OpenAI Twitter更新了&#xff0c;而且更新力度很大&#xff0c;这真是深夜放毒。 下面我们看下OpenAI本次的重大更新都有哪些&#xff1f; 函数调用能力 在Chat Completions API中引入了新的功能调用能力。gpt-4-0613和gpt-3.5-turbo-0613版本已进行了…

原创 | 一文读懂足球比赛中的随机博弈

作者&#xff1a;陈之炎本文约1500字&#xff0c;建议阅读5分钟 本文介绍了如何在足球比赛中读懂随机博弈。 据悉世界足坛的传奇球星梅西将于2023年6月中率领阿根廷国家足球队来到中国北京&#xff0c;参加一场备受瞩目的比赛。这场比赛成为了足球迷们心心念念的盛事&#xff0…

熬夜三晚之深度解析DuckDB MetaPipeline

深度解析DuckDB MetaPipeline 深度解析DuckDB MetaPipeline 1.导语 2.基础理论 3.HashJoin深度解析 3.1 RESULT_COLLECTOR 3.2 PROJECTION 3.3 HASH_JOIN 4.Ready 4.1 翻转 4.2 MetaPipeline与pipeline 5.汇总 1.导语 DuckDB 是…

用 ChatGPT 重构工作流程

如果你第一次听说 ChatGPT&#xff0c;那你要反思一下自己的信息获取渠道是不是出了问题&#xff0c;作为 AI 时代最强代表&#xff0c;你一定要亲自去体验一下&#xff0c;而不是道听途说。 公司需要降本增效&#xff0c;个体也一样&#xff0c;在工作中畅快应用 AI 来帮助自己…

chatgpt赋能python:Python断点调试指南:让调试更高效

Python断点调试指南&#xff1a;让调试更高效 在Python编程中&#xff0c;调试是一个必不可少的环节。当我们面临代码出现错误或程序不按预期运行时&#xff0c;如何快速找到问题&#xff0c;解决它们呢&#xff1f;这时候断点调试就发挥了重要的作用。本篇文章主要介绍Python…

NI VeriStand

概览 本文简要概述了NI VeriStand以及如何创建实时测试应用程序&#xff0c;并介绍如何结合NI LabVIEW等不同软件环境采用不同的方式创建额外的功能&#xff0c;如模型导入、FPGA功能自定义以及将NI LabVIEW Run-Time控件添加为工作区对象等。 内容 什么是NI VeriStand什么是…

Vicuna本地部署的实战方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

全志V3S嵌入式驱动开发(屏幕花屏问题的解决)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 之前我们测试过lcd屏幕驱动以及触控驱动时&#xff0c;当时确实是成功的。但是由于这个屏幕是直接从旗舰店买的&#xff0c;价格略贵&#xff0c;有…

vue3+vite+element-plus创建项目,修改主题色

element-plus按需引入&#xff0c;修改项目的主题色 根据官方文档安装依赖 ​npm install -D unplugin-vue-components unplugin-auto-import vite.config.js配置 // vite.config.ts import { defineConfig } from vite import AutoImport from unplugin-auto-import/vite …

Flutter - 命令行工具源码调试环境搭建

文章目录 前言开发环境环境搭建运行测试调试测试最后 前言 开发Flutter项目时难免会遇到各种问题&#xff0c;源码调试对于问题的解决不可或缺。 对于Flutter框架项目的源码调试&#xff0c;如果是Flutter核心库调试&#xff0c;只需要创建一个Flutter项目并在项目中使用需要…

中级前端笔试面试题总结

typeof null 的结果是什么&#xff0c;为什么&#xff1f; typeof null 的结果是Object。 在 JavaScript 第一个版本中&#xff0c;所有值都存储在 32 位的单元中&#xff0c;每个单元包含一个小的 类型标签(1-3 bits) 以及当前要存储值的真实数据。类型标签存储在每个单元的…

AI大模型落地不远了!首个全量化Vision Transformer的方法FQ-ViT(附源代码)

点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号ID&#xff5c;计算机视觉研究院 学习群&#xff5c;扫码在主页获取加入方式 论文地址&#xff1a;https://arxiv.org/pdf/2111.13824.pdf 项目代码&#xff1a;https://github.com/megvii-research/FQ-ViT 计…