2009-08-17 49 views

回答

3

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

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

因为StreamReaders实现了IDisposable,所以可以使用'using'块。

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

} 
11

如果没有抛出异常,它正确执行。如果抛出一个异常,期望cosntructor自行整理是合理的。否则,当您完成后,您可以致电Dispose以释放相关资源。正如其他人的回答所说,你几乎可以肯定希望使用using声明来实现这一点。

你也可能要使用File.OpenText代替:

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

我只是平时使用StreamReader构造函数时,我需要在不同的选项传递(这是相当罕见)。

1

我可能会丢失的问题什么的,因为这似乎太明显了,但两人的事情,寻找有

  1. 没有它抛出一个错误? 和
  2. 当您运行此操作并使用StreamReader读取时,您是否获得了您期望的内容?

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

+0

它做不会抛出任何错误。所以1是错误的。 2是真的。但是我想确保这种情况一直发生,并且我知道发生错误的位置。所以我很好奇,这就是为什么我问我的问题。 – zack 2009-08-18 13:09:06

0

您通常会对实例sr执行任何操作。封装你的下一个在try catch块中引用该对象的命令。

1

StreamReader constructor(假设一个字符串路径参数)如果失败会引发异常。

从链接引用:

的ArgumentException
路径是空字符串( “”)。

ArgumentNullException
path is null。

FileNotFoundException
无法找到该文件。

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

IOException 路径包含文件名,目录名称或卷标的错误或无效语法。

1

你最好要检查使用标准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 
} 
+0

谢谢丹的详细解答。它工作完美。 – zack 2009-08-17 20:47:44

+0

+ +1对于一个很好的理论答案,并且唯一一个带有try/catch的。但您不想将此贴复制到生产代码。 Viren应该研究Excption Handling策略。 – 2009-08-17 21:00:32