如果我有一个字符串,我知道我可以使用If System.IO.File.Exists(mystring)或System.IO.Directory.Exists(mystring)来查看它是什么。是否有一种方法可用于进行单次调用以确定它是哪种类型?因为,至少在Windows中,你不能同时拥有一个文件和一个同名的目录,似乎应该有一个函数接受一个字符串并返回“Folder”,“File”或“Nothing”
我目前正在这样做,但这似乎不是最好的方法:
If Directory.Exists(mystring) Then
' It's a folder
ElseIf File.Exists(mystring) Then
' It's a file
Else
' It's neither - doesn't exist
End If
答案 0 :(得分:3)
Use the System.IO.File.GetAttributes()
方法。返回的FileAttributes
枚举有一个标志,指示它是否是目录。
string path = @"C:\Program Files";
if( (int)(File.GetAttributes( path ) & FileAttributes.Directory) != 0 )
{
// .. it's a directory...
}
如果您知道存在的路径,则效果最佳。如果路径无效,您将收到异常。如果您不知道该路径存在,那么您首先调用Directory.Exists()
后跟File.Exists()
的方法可能会更好。
当然,您可以编写自己的方法将此逻辑包装在一起,这样您就不必在多个地方重复它。
答案 1 :(得分:0)
另一种解决方案可能是:
if ( !string.IsNullOrEmpty( Path.GetFileName(path) ) )
{
//it's a file
}
else if ( !string.IsNullOrEmpty( Path.GetDirectory(path) )
{
//it's a directory
}
这显然不是万无一失的,也不会以任何方式确定磁盘上是否存在给定的文件或目录。它只会确定路径是否包含类似文件名的内容。它显然不会像名为“foo.com”的目录一样处理奇怪的情况。但是,如果您正在寻找能够减少异常几率的非常接近的东西,这可能会有所帮助。