2

如果由于程序崩溃而未关闭打开的 FileStream 会发生什么?会自动关闭吗?我无法将它包含在 try catch 或 using 中,因为我正在对文件执行某些操作。就像我用打开按钮打开文件一样。

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

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

fs.Close();

但是如果在这两者之间发生了一些事情,比如程序崩溃。由于未正确关闭,文件是否无法访问?谢谢。

4

2 回答 2

3

实际上,我们无法知道在这种情况下会发生什么。MSDN 谈到FileStream

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

于 2015-10-23T07:52:04.943 回答
0

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

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

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

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

于 2013-08-14T05:26:09.593 回答