我正在开发一个功能类似于MS-DOS命令“ cd”的程序。用户在程序提示中键入“ cd ..”,然后使用Stringbuilder删除代表用户当前目录的字符。它的功能如下:
Prompt> cd..
在代码文件中声明一个Stringbuilder实例:
Stringbuilder builder = new Stringbuilder(@"E:\Folder");
在用户键入“ cd ..”并按Enter之后,程序将删除Stringbuilder值末尾的目录,最终结果如下:
Stringbuilder builder = new Stringbuilder(@"E:\");
我不确定我该怎么做,或者甚至有可能做到。我以为可以尝试builder.Length - Directory.Length
来获取目录名的长度,然后使用builder.Remove(int StartIndex, int length)
,但是我不知道该如何实现。
我可能要使用的另一件事是使用builder.ToString()
并将其分割,并使用反斜杠作为分隔符。
有什么建议吗?
答案 0 :(得分:1)
您可以使用Path.GetDirectoryName
,但这有点愚蠢。它只是在不知道文件系统实际上是什么样的情况下进行字符串操作。例如,如果您执行Path.GetDirectoryName(@"E:\Folder\")
,它将返回"E:\Folder"
,因为在给定字符串的末尾有一个斜杠。或者,您可以为它提供一个甚至不存在的文件夹,它仍然会为您提供答案。
我可以建议另一种方法:为当前工作目录保留一个DirectoryInfo
对象。例如:
var curDirectory = new DirectoryInfo(@"E:\Folder");
当需要显示它时,请使用curDirecotry.FullName
,它将返回完整路径,例如"E:\Folder"
。然后,当您需要进入目录时,它是一行,没有任何字符串操作:
curDirectory = curDirectory.Parent;
尽管您必须检查它是否为null
,因为如果已经在驱动器的根目录中,则Parent
将是null
。
DirectoryInfo
实际上是在查看文件系统,因此可以确保它始终有效。另外,您也可以使用它来查看文件夹的内容,我确定您会想要的。