У меня есть функция, которая автоматически создает указанный Path, определяя, является ли String Path File или Directory.

Обычно я бы использовал это, если путь уже exists:

FileAttributes attributes = File.GetAttributes("//Path");

if ((attributes & FileAttributes.Directory) == FileAttributes.Directory)
    {
        Directory.CreateDirectory("//Path");
    }

Но что, если это не так? Как проверить, является ли String Path File или Directory, если его не существует?

c# io
8
Enumy 22 Сен 2014 в 17:55

2 ответа

Лучший ответ

Если файлы в вашем сценарии должны иметь расширения, вы можете использовать этот метод.

ПРИМЕЧАНИЕ. В Windows разрешено иметь точки в каталогах, но в основном это было введено для совместимости файлов между операционными системами. В средах строго Windows считается плохим тоном иметь файлы без расширений или помещать точки или пробелы в имена каталогов. Если вам не нужно учитывать этот сценарий, вы можете использовать этот метод. В противном случае вам нужно было бы иметь какой-то флаг, отправленный через цепочку или структуру, чтобы идентифицировать намерение строки.

var ext = System.IO.Path.GetExtension(strPath);
if(ext == String.Empty)
{
    //Its a path
}

Если вам не нужно проводить какой-либо анализ типа файла, вы можете сделать следующее:

if(System.IO.Path.HasExtension(strPath))
{
    //It is a file
}
7
Carter 22 Сен 2014 в 15:17

Короткий ответ заключается в том, что не существует 100% способа отличить папку от файла только по пути. Файл не обязательно должен иметь расширение файла, а имя папки может иметь точки (что делает его похожим на расширение файла).

1
MarkD 27 Июл 2018 в 19:51