StringBuilder удаляет символы, пока не будет достигнут определенный символ - PullRequest
0 голосов
/ 12 ноября 2018

Я занимаюсь разработкой программы, которая работает аналогично команде 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 голосов
/ 12 ноября 2018

Вы можете использовать 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 фактически смотрит на файловую систему, поэтому вы можете быть уверены, что она всегда действительна. Кроме того, вы также можете использовать его для просмотра содержимого папки, что, я уверен, вы захотите сделать.

...