StringBuilder删除字符,直到达到某些字符

时间:2018-11-12 01:48:07

标签: c# console stringbuilder

我正在开发一个功能类似于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()并将其分割,并使用反斜杠作为分隔符。

有什么建议吗?

1 个答案:

答案 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实际上是在查看文件系统,因此可以确保它始终有效。另外,您也可以使用它来查看文件夹的内容,我确定您会想要的。