【问题标题】:C# check if file is readable [duplicate]C#检查文件是否可读[重复]
【发布时间】: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 吗?”这个问题。您是选择使用立即包裹每次访问的本地异常处理程序执行此操作,还是采用更全局的视图,这取决于您。

标签: c# file


【解决方案1】:

是的,最好使用 try catch,因为由于某些连接问题或文件未找到异常可能会发生 IO 异常。

   private static bool fileAccessible(string filePath) {
            return  File.Exists(filePath);

    }

【讨论】:

  • 如果filePath 不是有效路径会怎样?
  • 更正了代码。请验证,
猜你喜欢
  • 2012-08-07
  • 2013-06-23
  • 1970-01-01
  • 2012-12-06
  • 2015-07-19
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 2015-05-17
相关资源
最近更新 更多