如何识别已删除的路径是使用C#.Net的文件还是目录?
感谢
答案 0 :(得分:10)
假设文件/目录实际存在,您可以使用两种静态方法:
两者都接受单个字符串参数,并在文件/目录存在时返回布尔值。
另一种情况是当你有一个不引用文件系统中现有文件/目录的路径时 - 也许它指向数据库中的某种“虚拟文件/目录”,或者路径指向以前存在的文件/目录,但现在(可能)已删除。在这种情况下,您必须自己定义“类似路径的文件”和“类似路径的目录”的区别。我可以想到两种方法:
让我们在几个示例输入字符串上测试两种方法:
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.Exists
和File.Exists
同样出色。
有关详细信息,请参阅here。
答案 5 :(得分:1)
if (Path.HasExtension(fileFolderPath) && !string.IsNullOrEmpty(Path.GetFileName(fileFolderPath)))
{
//path is for file
}
当路径不存在时, Directory.Exists
和File.Exists
不是选项。