在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会发生什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)