我可以判断字符串是否与.NET中的文件或目录相对应?

时间:2010-06-25 19:46:02

标签: file .net

如果我有一个字符串,我知道我可以使用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

2 个答案:

答案 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”的目录一样处理奇怪的情况。但是,如果您正在寻找能够减少异常几率的非常接近的东西,这可能会有所帮助。