File 我能告诉你一个字符串是对应于.NET中的文件还是目录吗?

File 我能告诉你一个字符串是对应于.NET中的文件还是目录吗?,file,.net,File,.net,如果我有一个字符串,我知道我可以使用If System.IO.File.Exists(mystring)或System.IO.Directory.Exists(mystring)来查看它是哪个。是否有一种方法可以用来进行单个调用以确定它是哪种类型?因为,至少在Windows中,文件和目录不能同时具有相同的名称,所以似乎应该有一个函数接受字符串并返回“Folder”、“file”或“Nothing” 我目前正在这样做,但这似乎不是最好的方式: If Directory.Exists(mystrin

如果我有一个字符串,我知道我可以使用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
方法。返回的枚举有一个标志,指示它是否为目录

string path = @"C:\Program Files";
if( (int)(File.GetAttributes( path ) & FileAttributes.Directory) != 0 )
{
   // .. it's a directory...
}
如果您知道存在的路径,这将最有效。如果路径无效,您将得到一个异常。如果您不知道路径是否存在,那么首先调用
Directory.exists()
然后调用
File.exists()
的方法可能会更好


当然,您可以编写自己的方法来将此逻辑封装在一起,这样您就不必在多个地方重复它。

另一种解决方案可能是:

if ( !string.IsNullOrEmpty( Path.GetFileName(path) ) )
{
   //it's a file
}
else if ( !string.IsNullOrEmpty( Path.GetDirectory(path) )
{
   //it's a directory
}

这显然不是万无一失的,也不会以任何方式确定磁盘上是否存在给定的文件或目录。它将只确定路径中是否有类似文件名的内容。它显然不会处理像目录“foo.com”这样的奇怪情况。但是,如果您正在寻找一种非常接近的方法来降低异常发生的可能性,这可能会有所帮助。

如果路径不存在,如OP建议的那样?您将获得
filenotfoundexception
DirectoryNotFoundException
。他需要一种方法来确定路径本身是否应该是一个或另一个路径,以便使用相应的
.Exists
方法。@Oded:是的,您是正确的。我通过MSDN寻找更好的选择,但不幸的是,一个似乎不存在——至少在内置的.NET类中不存在。现在我已经更新了我的帖子来说明这一点。可以使用Win32 API调用。。老实说,如果字符串代表一个文件或目录,我不认为有一个简单的方法来区分它。有太多的排列——“c:\myExe.exe”可能是一个命名有趣的目录,“c:\myDir”可能是一个命名奇怪的文件,没有扩展名。我将用一个方法来包装它,该方法返回一个包含所有三个值(dir、file、DNE)的枚举,但我想知道这是否已经完成了。GetAttributes方法看起来很混乱,特别是因为它需要try/catch块。谢谢你确认我是以“最好”的方式进行的。