【问题标题】:File Manipulation in C#C# 中的文件操作
【发布时间】:2009-08-17 20:21:09
【问题描述】:

如何检查我的 C# 中的以下语句是否正确执行?

StreamReader sr = new StreamReader(Path_To_File);

【问题讨论】:

    标签: c# file-io


    【解决方案1】:

    如果它没有抛出异常,它就会正确执行。如果它抛出一个异常,那么期望 cosntructor 自行整理是合理的。否则,您可以在完成后调用Dispose 来释放相关资源。正如其他答案所说,您几乎肯定希望使用 using 语句来完成此操作。

    您可能还想改用File.OpenText

    using (TextReader reader = File.OpenText(fileName))
    {
    }
    

    我通常只在需要传递不同选项时使用StreamReader 构造函数(这种情况很少见)。

    【讨论】:

      【解决方案2】:

      如果没有,我希望它会引发异常。所以什么也不做;它会告诉你是否有问题。不过你应该是“using”吧:

      using(StreamReader sr = new StreamReader(Path_To_File))
      {
          // consume sr
      }
      

      【讨论】:

        【解决方案3】:

        由于 StreamReader 实现了 IDisposable,因此您可以使用“使用”块。

        using(StreamReader sr = new StreamReader(Path_To_File)) {
        
        }
        

        【讨论】:

          【解决方案4】:

          我可能在问题中遗漏了一些东西,因为这似乎太明显了,但要寻找的两件事是

          1. 是否引发错误? 和
          2. 当您运行它并使用 StreamReader 读取时,您是否获得了预期的内容?

          如果1为假,2为真,则正确执行。

          【讨论】:

          • 它没有抛出任何错误。所以 1 是错误的。 2 是真的。但是,我想确保这种情况一直都在发生,并且如果确实发生了错误,我知道错误发生在哪里。所以我只是好奇,这就是为什么我问我的问题。
          【解决方案5】:

          StreamReader constructor(假设是字符串路径参数)如果失败将抛出异常。

          引用自链接:

          参数异常
          path 是一个空字符串 ("")。

          ArgumentNullException
          路径为空。

          FileNotFoundException
          找不到文件。

          DirectoryNotFoundException
          指定的路径无效,例如位于未映射的驱动器上。

          IO异常 path 包含不正确或无效的文件名、目录名或卷标语法。

          【讨论】:

            【解决方案6】:

            您希望使用标准的 Try / Catch 块检查异常,如下所示:

            string pathToFile = @"G:\My Documents\donkeysex.txt";
            
            StreamReader sr = null;
            
            try
            {
                sr = new StreamReader(pathToFile);
                sr.Read();
                // etc.
            }
            catch (System.IO.FileNotFoundException ex)
            {
                // Handle exception
            }
            catch (System.IO.DirectoryNotFoundException ex)
            {
                // Handle exception
            }
            catch (System.IO.IOException ex)
            {
                // Handle exception
            }
            catch (Exception ex)
            {
                // Handle exception
            }
            finally
            {
                if (sr != null)
                    sr.Dispose();
            }
            

            如果您只是想在阅读之前确保文件存在,请使用:

            if (System.IO.File.Exists(pathToFile))
            {
                // Do your stuff
            }
            

            【讨论】:

            • +1 是一个很好的理论答案,也是唯一一个带有 try/catch 的答案。但是您不想将其复制粘贴到生产代码中。 Viren 应该调查 Excption 处理策略。
            【解决方案7】:

            你通常会对实例 sr 做一些事情。将引用该对象的下一个命令封装在 try catch 块中。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2016-05-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-04-14
              • 2016-02-21
              • 1970-01-01
              相关资源
              最近更新 更多