我有一个类,它从一个文件流中读取数据并写入另一个文件流。我担心在 closeFiles() 中处理完成后关闭流。
您将如何处理一个流的 dispose 可能引发异常以阻止另一个流的 dispose 被调用的可能性。
我应该调用 close 并处理流还是只处理一个?
如果我从流处理中捕获任何错误,然后继续移动和删除文件,如 lastOperation() 所示,会发生什么?
在一个完美的世界中,我想在 c++ 样式初始化列表中使用 using 语句,但我很确定这在 c# 中是不可能的。
编辑:感谢你们的快速回复。所以我应该做的是从 IDisposable 派生,然后更改构造函数并添加两个这样的处理方法?:
~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);
}
}