在C# / .NET中如何查找文件是否存在?

241

我想在C#中测试包含文件路径的字符串是否存在该文件(类似于Perl中的-e测试或Python中的os.path.exists()),请问有什么方法可以实现吗?

6个回答

368

20
即使文件存在,但如果调用者没有读取它的权限,File.Exists(path)将返回false。是否有不同的方法来处理这种情况并检查文件是否存在,即使调用者无法读取它? - ADTC
3
从安全角度看,这样做听起来很正常;但从开发者的角度看,可能会让事情变得更加复杂。如果您试图创建一个文件,在这种情况下会出现异常吗? - user276648
2
@ADTC 刚刚碰巧路过,想提一下 Dropbox 目录。它们可以被设置为只有创建或写入权限,但没有读取权限。虽然这与本问题直接无关,但它们并不像人们想象的那么奇怪。 - Ukko
1
附注:如果路径的大小写与 G: 上实际的不完全匹配,则 File.Exists 在 Google Drive 文件流 G: 驱动器上返回 False。通常在任何物理驱动器上,大小写不重要,所以我想知道,Exists 方法是否有什么问题? - CTZStef
1
@CTZStef 这是谷歌虚拟驱动的怪癖,而不是框架方法的问题。 - Eugene Mayevski 'Callback
显示剩余2条评论

77

System.IO.File:

using System.IO;

if (File.Exists(path)) 
{
    Console.WriteLine("file exists");
} 

30

System.IO.File.Exists(path)

msdn


8

请提供完整路径作为输入。避免使用相对路径。

 return File.Exists(FinalPath);

1

我使用WinForms,使用File.Exists(string path)的方法如下:

public bool FileExists(string fileName)
{
    var workingDirectory = Environment.CurrentDirectory;
    var file = $"{workingDirectory}\{fileName}";
    return File.Exists(file);
}

文件名 必须 包含扩展名,例如myfile.txt


4
使用 Path.Combine - edelwater
1
需要在目录和文件之间加上反斜杠: var file = $"{workingDirectory}\{fileName}"; - Mike
你说得对。我漏掉了一个字符 @Mike。 - Jesus Hedo

0
File.Exists(Path.Combine(_workDir, _file));

1
你的回答可以通过添加更多关于代码的信息以及它如何帮助提问者来改进。 - Tyler2P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接