Как определить, является ли объект файлом или папкой - PullRequest
1 голос
/ 15 мая 2011

Я пытаюсь определить, указывает ли данный путь на файл или каталог.В настоящее время моя логика очень проста и включает следующую проверку

if (sourcePath.Contains(".")) // then treat this path as a file 

Проблема выше в том, что в именах папок тоже могут быть точки.Я хотел бы иметь возможность удостовериться, что данный путь - это путь к файлу, без необходимости пытаться создавать экземпляр типа файлового потока и пытаться получить к нему доступ или что-то в этом роде.

Есть ли способ сделать это?

Заранее спасибо

Ответы [ 6 ]

10 голосов
/ 15 мая 2011

Можно использовать метод File.Exists :

Если путь описывает каталог, этот метод возвращает 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);
} 
3 голосов
/ 15 мая 2011

C #:

public bool IsFolder(string path)
{
    return ((File.GetAttributes(path) & 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 голос
/ 15 мая 2011
var isDirectory = (File.GetAttributes(path) & FileAttributes.Directory) == FileAttributes.Directory;
0 голосов
/ 03 сентября 2012
List<string> RtnList = new List<string>();
foreach (string Line in ListDetails)
{
    if (line.StartsWith("d") && !line.EndsWith("."))
    {
        RtnList.Add(line.Split(' ')[line.Split(' ').Length - 1] );


    }
}
0 голосов
/ 15 мая 2011

по поиску, я нашел это:

public bool IsFolder(string path)
{
    return ((File.GetAttributes(path) & 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.");
}
0 голосов
/ 15 мая 2011

System.IO.File.Exists("yourfilenamehere") сделает свое дело. Это вернет false, если путь не для файла. Он также вернет false, если путь не существует, поэтому будьте осторожны.

...