文件被另一个进程删除时文件stream会发生什么?

文件被另一个进程删除时文件stream会发生什么?,第1张

概述文件被另一个进程删除时文件stream会发生什么?

在C#中,我用fileShare.Delete打开一个文件。 这允许我打开文件而不限制其他进程删除它。 例如:

using (fileStream fs = new fileStream(@"C:temp1.txt",fileMode.Open,fileAccess.Read,fileShare.ReaDWrite | fileShare.Delete)) { int len = (int)fs.Length; byte[] array = new byte[len]; int bytesRead = fs.Read(array,len); }

我的问题是:

如果文件在我们创buildstream之后被另一个进程删除,但在读取之前会发生什么呢? *** 作系统是否保留文件副本,直到stream句柄closures?

我可以依靠读取已删除的文件而不会收到任何错误或错误的内容吗?

检查用户是否不活动

在windows上进行蓝牙开发

我怎样才能得到一个服务来请求重启?

windows Update API c#代码无法获取更新历史logging

以编程方式打印文档

如何基于单元格在DataGrIDVIEw中单击来处理C#中的事件?

如何testing主机名称是否指本地机器

断开数据windows程序使用sql Server Compact

为什么.NET应用程序阻止windowsclosures?

如何杀死一个正在运行的程序,以及如何去捕捉它们?

该文件被标记为删除,但直到最后一个打开的句柄被关闭时才被删除,如Deletefile文档中所述。

请注意,您无法为标记为删除的文件打开新的句柄,但该文件仍将出现在目录列表中,并且不能由具有相同名称的文件替换,直至其被删除。 这与Unix系统不同,Unix系统中的文件立即从目录中消失(“解除链接”)。 正如Ben在评论中所建议的那样,在删除文件之前,可以通过重命名和/或移动文件来解决这个问题。

此外,MoonRabbit指出,您可以使用资源管理器“删除”一个打开的文件,但这是因为它只将文件移动到回收站。 立即删除文件的Shift + Delete选项将不起作用。

是的,另一个进程可以删除这个文件,但是你不会得到任何异常,因为指向磁盘文件的指针是创建的,所以你的进程将继续读取,但是当你重试打开这个流时,你会得到一个异常文件系统不存在

这里是一个完整的例子来重现你的情况

尝试执行此 *** 作并转到资源管理器并删除您的文件

class Program { static voID Main(string[] args) { for (int i = 0; i < 10000; i++) { file.AppendAllText(@"c:temp1.txt",GuID.NewGuID().ToString()); } //read the file using (fileStream fs = new fileStream(@"C:temp1.txt",fileShare.ReaDWrite | fileShare.Delete)) { while (fs.CanRead) { //here I read a chunk of 1000 bytes to let stream open int len = 1000; Thread.Sleep(1000); byte[] array = new byte[len]; int bytesRead = fs.Read(array,len); } } } }

总结

以上是内存溢出为你收集整理的文件被另一个进程删除时文件stream会发生什么?全部内容,希望文章能够帮你解决文件被另一个进程删除时文件stream会发生什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1291496.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存