我有一个类,从一个文件流中读取数据并写入另一个文件流。我担心在closeFiles()函数完成处理后关闭流。
如果一个流的dispose抛出异常,阻止了对另一个流的dispose调用,你该如何处理?
我应该在流上调用close和dispose,还是只调用其中之一?
如果我捕获了流dispose时出现的任何错误,然后继续执行lastOperation()中所示的移动和删除文件操作会发生什么?
在完美的世界里,我想在C++风格的初始化列表中使用using语句,但我相信在C#中不可能实现这一点。
编辑:谢谢大家的快速回复。所以我应该从IDisposable派生,然后改变构造函数并添加这两个disposing方法,就像这样:
如果一个流的dispose抛出异常,阻止了对另一个流的dispose调用,你该如何处理?
我应该在流上调用close和dispose,还是只调用其中之一?
如果我捕获了流dispose时出现的任何错误,然后继续执行lastOperation()中所示的移动和删除文件操作会发生什么?
在完美的世界里,我想在C++风格的初始化列表中使用using语句,但我相信在C#中不可能实现这一点。
编辑:谢谢大家的快速回复。所以我应该从IDisposable派生,然后改变构造函数并添加这两个disposing方法,就像这样:
~FileProcessor()
{
Dispose(true);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
sw.Flush();
}
closeFiles();
disposed = true;
}
}
我基本上正在做的是:
class FileProcessor
{
private string in_filename;
private string out_filename;
private StreamReader sr;
private StreamWriter sw;
bool filesOpen = false;
public FileProcessor(string filename)
{
in_filename = filename;
out_filename = filename + ".out";
openFiles();
}
~FileProcessor()
{
closeFiles();
}
private void openFiles()
{
sr = new StreamReader(in_filename);
sw = new StreamWriter(out_filename);
filesOpen = true;
}
private void closeFiles()
{
if (filesOpen)
{
sr.Close();
sw.Close();
sr.Dispose();
sw.Dispose();
filesOpen = false;
}
}
/* various functions to read, process and write to the files */
public void lastOperation()
{
closeFiles();
File.Delete( in_filename );
Directory.Move(out_filename, outdir + out_filename);
}
}