C # Как извлечь последнее слово из пути к каталогу? - PullRequest
0 голосов
/ 17 декабря 2010

У меня есть программа, которая "извлекает" различные пути каталогов из текстового файла журнала и печатает различные результаты в соответствии со словом.

Примеры путей к каталогам:

  • C: / Документы и настройки / Все пользователи / Рабочий стол / AccessData FTK Imager.lnk

  • C: / Документы и настройки / Все пользователи / Пуск / Программы / AccessData

  • C: / Документы и настройки / Администратор / Рабочий стол / AccessData FTK Imager.exe: Zone.Identifier

Следовательно, как я могу найти имя файла или папки после последнего символа "/"?Это поможет программе определить между файлами и папками.Пожалуйста, обратите внимание на несколько "."и пробелы, найденные в путях к каталогам.и т.д. "Imager.exe: Zone.Identifier".Поэтому трудно использовать if(!name.contains()".")

и т. Д.Как получить «AccessData FTK Imager.lnk» или «AccessData» или «AccessData FTK Imager.exe: Zone.Identifier» из пути STRING?!

Может кто-нибудь дать совет относительно методов или кодов, которые необходимо решитьЭта проблема?Спасибо!

Коды:

if (!token[7].Contains("."))
                {    

                    Console.WriteLine("The path is a folder?");

                    Console.WriteLine(token[7]);

                    Console.WriteLine(actions);

                    MacActions(actions);

                    x = 1;
                } 

Ответы [ 6 ]

1 голос
/ 17 декабря 2010

как насчет того, чтобы пометить его символом "/", как то, что вы делаете ... и тогда вы поймете, что последний токен - это файл, и что бы там ни было, прежде чем это путь.

1 голос
/ 17 декабря 2010

Это поможет программе определить между файлами и папкой

Невозможно определить, представляет ли путь файл или папку, если только вы не обращаетесь к реальной файловой системе.Имя каталога, например «Foo.exe», будет вполне допустимым, и файл без расширения («Foobar») также будет действительным.

1 голос
/ 17 декабря 2010

Используйте класс Path при работе с путями файлов и используйте класс File и Directory при работе с реальными файлами и папками.

string str1=@"C:/Documents and Settings/All Users/Desktop/AccessData FTK Imager.lnk";
string str2=@"C:/Documents and Settings/All Users/Start Menu/Programs/AccessData";
string str3=@"C:/Documents and Settings/Administrator/Desktop/AccessData FTK Imager.exe:Zone.Identifier";

Console.WriteLine(Path.GetFileName(str1));
Console.WriteLine(Path.GetFileName(str2));
Console.WriteLine(Path.GetFileName(str3));

выводит:

AccessData FTK Imager.lnk
AccessData
Zone.Identifier <-- it chokes here because of the :

Этот классработает со строками, так как у меня нет этих конкретных файлов и / или папок в моей системе.Также невозможно определить, является ли AccessData папкой или файлом без расширения.

Я мог бы использовать здравый смысл и объявить все с расширением как файл (Path.GetFileExtension может бытьиспользуется здесь), а все остальное - как папка.
Или я мог бы просто проверить, является ли рассматриваемая строка действительно файлом или папкой на моем компьютере, используя (File.Exists и Directory.Exists соответственно).

if (File.Exists(str2))
    Console.WriteLine("It's a file");
else if (Directory.Exists(str2))
    Console.WriteLine("It's a folder");
else
    Console.WriteLine("It's not a real file or folder");
1 голос
/ 17 декабря 2010

Использование Path.GetFileName.

Символы после последнего символа каталога в пути. Если последний символ пути является символом каталога или разделителя томов, этот метод возвращает String.Empty.

0 голосов
/ 17 декабря 2010

Полагаю, у вас есть только строка, представляющая имя файла, если вы не уверены в этом.Совершенно нормально иметь папку namen что-то вроде Folder.doc.Так что если у вас нет доступа к реальной файловой системе, это трудно проверить.Вы можете приблизиться, используя регулярное выражение, например:

(.*\\)(.+)(\..*)

Попробуйте: http://www.regexplanet.com/simple/index.html Если вы получите какой-либо вывод в группе № 3, скорее всего, это файл, а не папка.Если вы не получили какой-либо вывод, попробуйте это сразу после:

(.*\\)(.+)(\..*)?

Это даст вам папку в группе 2.

0 голосов
/ 17 декабря 2010

Вы можете просто разделить всю строку на /

например:

string a = "C: / Documents and Settings / Все пользователи / Рабочий стол / AccessData FTK Imager.lnk";string [] words = a.split ('/');int len ​​= words.length;теперь слова [len] возвращают данные после последней косой черты (/). Надеюсь, вы понимаете ...

...