如果由于程序崩溃而未关闭,那么打开的文件流会发生什么?

时间:2013-08-14 02:09:50

标签: c# wpf .net-4.5

如果由于程序崩溃而未关闭,那么打开的FileStream会发生什么? 它会自动关闭吗? 我不能将它包含在try catch或者使用中,因为我正在使用该文件。 这就像我用一个打开按钮打开文件。

private void button1_Click(object sender, RoutedEventArgs e)
{
    fs = new FileStream("Test.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);          
}

然后我用它做点什么。然后在应用程序的退出或关闭时,我执行close。

fs.Close();

但是,如果发生了某些事情,比如程序崩溃会怎样。 文件是否因为未正确关闭而无法访问? 感谢。

2 个答案:

答案 0 :(得分:1)

实际上我们无法知道在这种情况下会发生什么。 MSDN说FileStream Class那个

  

如果进程因部分文件被锁定而终止,或者关闭具有未完成锁定的文件,则行为未定义。

答案 1 :(得分:0)

当应用程序退出时,无论是有意还是无意,很难找到Windows将会做什么。

MSDN上的Terminating a Process文章描述了流程终止时会发生什么,最值得注意的是。

  

流程中的任何剩余线程都标记为终止   过程分配的任何资源都被释放   所有内核对象都已关闭   流程代码将从内存中删除   设置过程退出代码   发信号通知过程对象。

稍微偏离主题,但在您的特定代码中,FileStream实现了IDisposable,因此您应该研究using关键字,以获取有关确定性资源清理的信息。< / p>