ChihHuCheYeh's Blog

一个关于文件访问的简单小算法

2018/04/07 Share

假设,如果你要编写一个需要访问和操纵文件的程序,但是用户不想原封不动的输入文件/目录的全名,因为那样效率很低,甚至会输入出错,如何改变这种现状呢?我们或许可以给每一个文件/路径对象加上一个隐含的索引的形式,接下来这个方法或许能解决一些问题。

思路

首先,把系统的文件目录想象成一个元素超级多的巨型一维数组,每一个文件名/路径名(行),都有一个从0开始的索引,那么,想办法从这个数组中取出指定行的元素,便做到访问了。

理清思绪,大概可以分为如下过程:

  1. 为每一个对象附上一个专属的索引号。
  2. 列出每个对象的索引号。
  3. 输入指定索引号。
  4. 获取输入的索引,寻找索引号所属的对象。
  5. 回到第1步。

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
string[] Path = Directory.GetDirectories("Game\\"); //一级目录
string[] Index; //二级目录
int Input; //用户输入

/* 这一步是为了在屏幕上列出文件表和每一个文件的索引号 */
for (int i = 0; i < Path.Length; i++)
{
Console.WriteLine(i+" - "+Path[i]); // i即是每一个对象的索引号
}

/* 用户的操作 */
while (true)
{
Console.Write("File Index:");
Input = int.Parse(Console.ReadLine());
Index = Directory.GetDirectories(Path[Input] + "\\"); //根据输入进入指定路径
Console.WriteLine("你进入了索引为 {0} 的目录 {1}",Input,Index[Input]);

/* 列出用户进入的子目录 */
for (int j = 0; j < Path.Length-1; j++) //-1防止越界
{
Console.WriteLine(j + " - " + Index[j]); // j即是每一个对象的索引号
}
}

效果如下:

运行效果

总结

或许这可能是在造轮子,但是换位思考一下,不光是在控制台程序中,或许在大型的项目中,关于文件操作与访问的模块中,可能是一个很重实用的算法。

CATALOG
  1. 1. 思路
  2. 2. 实现
  3. 3. 总结