涉及到两个问题: 一、访问磁盘中文件夹、文件夹下面的文件夹 先看一下磁盘文件夹结构 C盘下面有个根文件夹SaveFile,SaveFIle下面有两个子文件夹分别为,2018、2019, 子文件下2018下面有两个子文件夹18120和18131 子文件下2019下面有两个子文件夹18120和18129 现在希望把SaveFile子文件夹和子文件夹下面的文件夹的名称存起来,也就是下面这样的 2018 18120 18131 2019 18120 18129 二、基于以上的结构我们要怎么样存数据呢 其实我一开始自己也没绕出来的,最初想到的是使用Dictio 在C#编程中,我们经常会遇到需要存储相同键但对应多个值的情况。在这个问题中,开发者需要处理一个文件系统的层级结构,例如C盘下的SaveFile文件夹及其子文件夹。通常,`Dictionary<TKey, TValue>`类是用于存储键值对的数据结构,但它的设计不允许有重复的键。然而,我们可以利用`Dictionary<TKey, TValue>`的特性,通过让值为一个列表或其他可容纳多个元素的数据结构,来实现存储相同键的多个值。 我们需要遍历文件系统以获取文件夹结构。在C#中,可以使用`System.IO`命名空间中的`DirectoryInfo`类来访问和操作文件夹。例如,以下代码会获取指定路径下的所有子文件夹: ```csharp using System.IO; DirectoryInfo baseDir = new DirectoryInfo(@"C:\SavaFile"); DirectoryInfo[] subDirs = baseDir.GetDirectories(); ``` 接着,为了存储这些文件夹的层级关系,我们可以创建一个`Dictionary<string, List<string>>`,其中键是年份(如2018、2019),值是一个字符串列表,表示该年份下的子文件夹。这样,即使年份相同,我们也可以为每个年份存储多个子文件夹: ```csharp Dictionary<string, List<string>> folderStructure = new Dictionary<string, List<string>>(); foreach (var subDir in subDirs) { if (!folderStructure.ContainsKey(subDir.Name)) { folderStructure.Add(subDir.Name, new List<string>()); } folderStructure[subDir.Name].Add(subDir.FullName); } ``` 在上面的代码中,`FullName`属性用于获取完整路径,确保我们存储的是文件夹的全名,而不仅仅是名字。 如果需要进一步获取子文件夹的子文件夹,我们可以递归地调用这个过程。对于每个子文件夹,我们再次调用`GetDirectories()`方法,并将结果添加到对应的列表中。这样,整个文件夹结构就可以被有效地存储下来。 对于不能直接使用相同键的`Dictionary<TKey, TValue>`,我们可以考虑使用`Hashtable`,它也支持键值对存储。不过,`Hashtable`是非泛型的,因此使用时需要注意类型转换。在上面的示例中,我们选择了`Dictionary<string, List<string>>`,因为它提供了更好的类型安全性和性能。 处理文件夹结构并存储相同键的多个值的关键在于,使用一个可以容纳多个元素的数据结构作为`Dictionary<TKey, TValue>`中的值。这样,尽管键是唯一的,但我们可以通过键对应的值来存储多个相关的信息。在本例中,这个信息是文件夹的层次结构。
- 粉丝: 0
- 资源: 916
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- NodeJs安装教程(附node-v18.19.1-x64版本)
- TencentOS tiny Hazardous gas detector-结构体
- SSM-springSSM-spring
- nvm-cn-安装包nvm-cn-安装包
- hikyuu-c++hikyuu-c++
- FPGA-fpgaFPGA-fpga
- zorm-mysqlzorm-mysql
- java-leetcode题解之Maximum Nesting Depth of Two Valid Parentheses
- java-leetcode题解之Maximum Gap.java
- java-leetcode题解之Maximum Frequency Stack.java
评论0