Типы файловых систем в .Net - PullRequest
0 голосов
/ 19 марта 2010

Я не понимаю абстракции и терминологию: - (

Например, DirectoryInfo.FullName определяется как полный путь к каталогу или файлу, но это строка! То же самое относится и к DirectoryInfo.Name, FileInfo.FullName, Path.GetDirectoyName и так далее.

Это означает, что в .Net нет «глубины» (или «мяса» - мой английский не очень хорош) для объектов файловой системы. Там нет защиты от системы типов. Я не могу, например, определить два объекта Path и спросить, находится ли один из них «над» другим - мне нужно манипулировать строками. Я не могу различить путь, который идентифицирует каталог, и путь, который идентифицирует файл. Я ничего не могу сделать! - (Просто управляйте строками.

Это правильно (или я просто что-то упускаю). Если правильно, есть ли альтернативы?

Ответы [ 4 ]

3 голосов
/ 19 марта 2010

Взгляните на System.IO.Path . Чтобы узнать, есть ли у вас файл, вы можете сделать Path.GetFileName("C:\\test\\") == String.Empty. Или, если вы уверены, что у файла есть расширение, вы можете использовать Path.HasExtension.

1 голос
/ 19 марта 2010

Я думаю, что типобезопасными объектами для объектов FS являются FileInfo и DirectoryInfo сами по себе.

1 голос
/ 19 марта 2010

Вы должны взглянуть на класс Path и класс Uri.

MSDN ссылки:

Класс пути

Uri Class

Например, с классом Path у вас есть методы для получения только каталога, только filenam или даже только имени файла без расширения для заданного пути.

С классом Uri у вас есть свойство сообщать вам, является ли оно абсолютным Uri (IsAbsoluteUri), и метод для создания относительного Uri (MakeRelativeUri). Обратитесь к Uri FAQ для получения дополнительной информации.


Пример обхода пути сверху вниз:

var dir = new DirectoryInfo(Environment.CurrentDirectory);
do
{
    Console.WriteLine(dir.Name);

    dir = dir.Parent;
} while (dir != null);
0 голосов
/ 19 марта 2010

Что такое путь к файлу больше, чем строка? Вы можете использовать класс Path для работы со строками. Класс DirectoryInfo также имеет Parent для получения своего родительского каталога, а FileInfo имеет свойство Directory для получения своего текущего каталога. Что еще тебе нужно?

...