C#.NET - 删除的路径是目录还是文件

时间:2009-09-05 09:51:34

标签: c# file-io

如何识别已删除的路径是使用C#.Net的文件还是目录?

感谢

6 个答案:

答案 0 :(得分:10)

假设文件/目录实际存在,您可以使用两种静态方法:

两者都接受单个字符串参数,并在文件/目录存在时返回布尔值。

另一种情况是当你有一个引用文件系统中现有文件/目录的路径时 - 也许它指向数据库中的某种“虚拟文件/目录”,或者路径指向以前存在的文件/目录,但现在(可能)已删除。在这种情况下,您必须自己定义“类似路径的文件”和“类似路径的目录”的区别。我可以想到两种方法:

  • 答:目录路径以目录分隔符结束(由Wael Dalloul建议)
  • B:文件路径的最后一个路径标记
  • 中有一个扩展名分隔符

让我们在几个示例输入字符串上测试两种方法:

  • c:\windows\是两种情况下的目录
  • c:\windows仅在使用方法B
  • 时才是目录
  • c:\windows\notepad.exe是两种情况下的文件
  • c:\windows\system32\drivers\etc\hosts仅是方法A
  • 中的文件

正如这些例子所指出的,这两种方法都不能保证在所有情况下给出预期的答案,除非你能够从头开始精确控制路径的设计。< / p>

答案 1 :(得分:4)

如果在文件上使用Directory.Exists(...),它将返回false。 同样,如果在目录上使用File.Exists(...),它将返回false

答案 2 :(得分:2)

你也可以使用: path.GetFileName

如果路径的最后一个字符是目录或卷分隔符,则此方法返回Empty,因此您可以检查结果是否为空,因此它是一个目录,否则它就是一个文件。

答案 3 :(得分:1)

如果您有扩展程序,那么您可以猜测它是一个文件,但这是一个猜测,因为您始终可以命名您的文件夹“myfile.txt”。提到的另一个猜测是它是否以路径分隔符结束。

File.Exists和Directory.Exists都使用GetFileAttributesEx查看文件的属性,但因为它不再存在,所以没有该选项。如果它在回收站中,您可以在那里找到它 - this question有详细信息。

答案 4 :(得分:1)

您可以使用

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetError = true)]
static extern int GetFileAttributes(string lpFileName);

bool IsDirectory(string path) {
     return GetFileAttributes(path) & 16 == 16;
}

然而,其他答案中建议的Directory.ExistsFile.Exists同样出色。

有关详细信息,请参阅here

答案 5 :(得分:1)

if (Path.HasExtension(fileFolderPath) && !string.IsNullOrEmpty(Path.GetFileName(fileFolderPath)))
{
    //path is for file
}
当路径不存在时,

Directory.ExistsFile.Exists不是选项。