【发布时间】:2015-05-13 07:45:18
【问题描述】:
我需要读取多个文件,但有时它们不可用或无法从当前用户读取。这是我用来检查文件是否有效的代码,但我认为我没有正确使用using 语句。
private static bool fileAccessible(string filePath) {
using (FileStream fs = new FileStream(filePath, FileMode.Open)) {
if (fs.CanRead) {
return true;
}
else {
return false;
}
}
return false; // compiler says "unreachable code"
}
我应该在using 语句之外插入一个try/catch 块来捕获不可用文件引发的错误,还是如果filePath 不可用,using 会继续运行而不引发错误?
额外问题:这是检查文件是否可用且可访问的正确方法吗?如果答案是肯定的,我可以将FileMode.Open 更改为FileMode.Append 以对可写文件执行相同的检查吗?
【问题讨论】:
-
返回假; // 编译器说不需要“无法访问的代码”。
-
重复问题仅解决权限问题,但我还需要检查文件是否存在
-
@Naigel 您可以在使用语句之前调用
File.Exists(filepath)来检查文件是否存在 -
文件系统不仅仅在你的程序的控制之下。因此,此函数可能会返回
true,但当您实际基于此执行操作时,该文件可能不再可用。因此,我想说这主要是在浪费时间 - 继续尝试使用文件以任何你想要的方式,并在发生故障时做出反应。跨度> -
是的,在一定程度上。对于您的应用程序无法控制的任何资源(文件系统、网络、远程服务器),您必须编写可以应对随时发生的故障的代码。再多的前期测试都无法回答“我能完成任务 X 吗?”这个问题。您是选择使用立即包裹每次访问的本地异常处理程序执行此操作,还是采用更全局的视图,这取决于您。