这就是我试图检查是否可以在实际读取之前读取文件的方法
FileStream stream = new FileStream();
try
{
// try to open the file to check if we can access it for read
stream = File.Open(this.DataSourceFileName, FileMode.Open, FileAccess.Read);
}
catch (IOException ex)
{
return false;
}
finally
{
stream.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?
也File.Open类似于File.ReadAllText,我的意思是,它们的性能同样昂贵吗?
是否可以读取文件取决于许多因素:您是否具有权限,硬盘是否损坏。我可能会走与您相同的路线。
但是,您必须记住,从此方法获得的信息只是快照。如果在调用此方法后立即有人更改了该文件的权限,则以后在代码中访问该文件仍然会失败。您不应该依赖此方法的结果。
只是一个建议,下面的代码执行相同的操作,但更加简洁:
try
{
File.Open(this.DataSourceFileName, FileMode.Open, FileAccess.Read).Dispose();
return true;
}
catch (IOException)
{
return false;
}
Run Code Online (Sandbox Code Playgroud)
由于您并没有真正使用流,因此不必保留对其的引用。取而代之的是,您只需调用的处理结果就可以立即处理流File.Open()。
编辑:
请参阅https://gist.github.com/pvginkel/56658191c6bf7dac23b3893fa59a35e8,以获取有关为什么将放在Dispose()结尾File.Open()而不是使用using语句的解释。
Dan*_*inu -1
你的解决方案看起来不错。您还可以使用“using”语句:
using (FileStream stream = new FileStream())
{
try {
stream = File.Open(this.DataSourceFileName, FileMode.Open, FileAccess.Read);
}
catch { return false; }
}
Run Code Online (Sandbox Code Playgroud)
编译器将其转换为 try/finally 块,并在执行块代码后自动释放该对象。
文件打开仅打开文件以进行读/写。
ReadAllText 打开文件读取文本并关闭它,因此需要更长的时间。您可以选择适合您情况的方法。
| 归档时间: |
|
| 查看次数: |
18462 次 |
| 最近记录: |