#c# #file #file-io #filepath
#c# #файл #file-io #путь к файлу
Вопрос:
Я пытаюсь определить, указывает ли данный путь на файл или каталог. В настоящее время моя логика очень проста и включает в себя следующую проверку
if (sourcePath.Contains(".")) // then treat this path as a file
Проблема, описанная выше, в том, что в именах папок тоже могут быть точки. Я хотел бы иметь возможность убедиться, что заданный путь соответствует пути к файлу, без необходимости пытаться создать экземпляр filestream type и пытаться получить к нему доступ или что-либо подобное.
Есть ли какой-нибудь способ сделать это?
Заранее спасибо
Ответ №1:
Вы могли бы использовать файл.Существует метод:
Если path описывает каталог, этот метод возвращает false
Итак:
if (File.Exists(sourcePath))
{
// then treat this path as a file
}
Существует также метод Directory.Exists, и следующий пример приведен в документации:
if(File.Exists(path))
{
// This path is a file
ProcessFile(path);
}
else if(Directory.Exists(path))
{
// This path is a directory
ProcessDirectory(path);
}
else
{
Console.WriteLine("{0} is not a valid file or directory.", path);
}
Комментарии:
1. @Erno, это правда, но если целью операции является манипулирование этим файлом, то, вероятно, это безопасная проверка. Также, если ни файл, ни каталог не существуют по заданной строке, невозможно сказать, является ли это файлом или каталогом.
2. @Darin: это зависит от того, откуда он получил исходный путь.
3. @Erno, что ты имеешь в виду? Как я уже сказал, если ни файл, ни каталог не существуют по заданной строке (независимо от того, откуда вы ее взяли), вы не сможете определить, представляет ли эта строка файл или каталог.
Ответ №2:
C#:
public bool IsFolder(string path)
{
return ((File.GetAttributes(path) amp; FileAttributes.Directory) == FileAttributes.Directory);
}
VB.Net:
Public Function IsFolder(path As String) As Boolean
Return ((File.GetAttributes(path) And FileAttributes.Directory) = FileAttributes.Directory)
End Function
Эта функция выдает File not found exception
, если файл не существует. Поэтому вы должны перехватить его (или использовать подход Дарина Димитроу).
Try
Dim isExistingFolder As Boolean = IsFolder(path)
Dim isExistingFile = Not isExistingFolder
Catch fnfEx As FileNotFoundException
'.....
End Try
Комментарии:
1. Вы можете сделать этот метод еще короче в .NET 4:
return File.GetAttributes(path).HasFlag(FileAttributes.Directory);
.
Ответ №3:
var isDirectory = (File.GetAttributes(path) amp; FileAttributes.Directory) == FileAttributes.Directory;
Ответ №4:
System.IO.File.Exists("yourfilenamehere")
сделает свое дело. Это вернет false, если путь указан не для файла. Он также вернет false, если путь не существует, поэтому будьте осторожны.
Ответ №5:
погуглив, я нашел это:
public bool IsFolder(string path)
{
return ((File.GetAttributes(path) amp; FileAttributes.Directory) == FileAttributes.Directory);
}
затем вы можете вызвать функцию следующим образом:
// Define a test path
string filePath = @"C:Test Folder";
if (IsFolder(filePath)){
MessageBox.Show("The given path is a folder.");
}
else {
MessageBox.Show("The given path is a file.");
}
Ответ №6:
List<string> RtnList = new List<string>();
foreach (string Line in ListDetails)
{
if (line.StartsWith("d") amp;amp; !line.EndsWith("."))
{
RtnList.Add(line.Split(' ')[line.Split(' ').Length - 1] );
}
}
Комментарии:
1. был ли этот ответ ошибочно отправлен на этот вопрос? Я не вижу корреляции.