tim*_*ado -1 c# filestream binaryreader binarywriter
我有一个表单应用程序执行模拟并不断读取/写入二进制文件.如果让它通过,一切正常.但是,如果表单已关闭/模拟已中止,则文件流未正确关闭 - 文件将被锁定.有没有办法确保所有流关闭?我尝试了以下 - 但它没有效果......非常感谢,T
public BinaryWriter BinWrite;
public BinaryReader BinRead;
public BinaryWriter EnvBinWrite;
public BinaryReader EnvBinRead;
public void theForm_FormClosing(object sender, FormClosingEventArgs e)
{
//Close all binary file reader/writers -- crashes if it cannot overwrite files
foreach (Building B in AllBldgs)
{
try
{
EnvBinRead.Close();
}
catch
{ continue; }
try
{
EnvBinWrite.Close();
}
catch
{ continue; }
try
{
BinRead.Close();
}
catch
{ continue; }
try
{
BinWrite.Close();
}
catch
{ continue; }
}
}
Run Code Online (Sandbox Code Playgroud)
您确定知道该continue关键字的用途吗?请注意,这将继续下一个循环,而不是下一个代码块.因此,如果关闭时发生异常EnvBinRead,则不会进入要关闭的块EnvBinWrite,而是继续执行下一项AllBldgs.
要吃掉所有异常并仍尝试关闭所有二进制编写器,你会写:
foreach (Building B in AllBldgs)
{
try
{
EnvBinRead.Close();
}
catch (Exception exp)
{
Console.WriteLine("Closing EnvBinRead failed!" + exp.ToString());
}
try
{
EnvBinWrite.Close();
}
catch (Exception exp)
{
Console.WriteLine("Closing EnvBinWrite failed!" + exp.ToString());
}
try
{
BinRead.Close();
}
catch (Exception exp)
{
Console.WriteLine("Closing BinRead failed!" + exp.ToString());
}
try
{
BinWrite.Close();
}
catch (Exception exp)
{
Console.WriteLine("Closing BinWrite failed!" + exp.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,仅仅吃异常并不是一个好主意.如果您不关心阅读器或写入是否可以关闭,请检查是否已按照注释中的建议关闭它之前对其进行了初始化.
| 归档时间: |
|
| 查看次数: |
1408 次 |
| 最近记录: |