当前位置: 首页 > 编程语言 > C#

删除关闭文件共享

时间:2023-04-10 15:18:19 C#

删除关闭文件使用语言:C#理论:我想在临时文件夹中创建一个带有FileOptions.DeleteOnClose标志的文件。文件已成功创建,我将dato写入其中,下一步是启动与文件关联的应用程序Process.Start(...)并允许用户检查文档,最后我关闭句柄然后作为一旦其他进程将临时文件的句柄关闭到被操作系统删除的文件。我的问题是其他进程无法打开文件,即使是阅读,尽管我添加了FileShare.ReadWrite|FileShare.Delete到共享模式。有什么建议么?其他进程在使用DeleteOnClose打开文件时需要指定FileShare.Delete来自MSDNCreateFile文档:“FILE_FLAG_DELETE_ON_CLOSE...除非指定FILE_SHARE_DELETE共享模式,否则对该文件的后续打开请求失败。”检查一下:您需要确保所有进程都在使用FileShare.ReadWrite和FileShare.Delete打开文件。即使创建者以share-readwrite打开,如果第二个程序尝试以share-read打开,第二个程序基本上会说没有人可以写。但是第一个程序已经具备了这个能力,所以第二个程序失败了。切换到Linuxscnr好吧,现在说真的:这是Windows操作系统中的一个错误,无法真正修复。打开该文件的每个程序都必须同意也打开该文件的其他程序。这是我多年前在使用Windows时遇到的问题。打开一个文件并说:让别人打开它是不够的。其他人也必须说打开文件,即使它已经打开。相反,在Linux上,操作系统不允许像Windows那样锁定任何文件。在这里,如果任何文件同时被多个程序使用,程序本身必须确保并发访问被锁定。此外,在Linux上,我们可以只创建文件,确保其他进程已启动并打开文件,然后删除文件(当它打开时)。然后文件名立即从文件系统中删除,但文件仍由文件系统驱动程序维护,直到最后一个链接(包括打开的文件句柄)被删除。回到你的问题:因为所有这些在Windows上都不起作用,你可以做另外两种方法:注册要在下次启动时删除的文件(在Win3x期间,win.ini中有一个部分用于此。较新的Windows版本仍然支持它,我不记得现在是如何完成的)。再启动一个进程,等它打开文件,关闭文件,然后每隔一分钟尝试删除文件,直到删除成功。—本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: