gpt4 book ai didi

c# - File.Delete 尝试删除打开的文件失败但在进程退出时删除?

转载 作者:行者123 更新时间:2023-11-30 15:36:57 25 4
gpt4 key购买 nike

在为在另一个进程中打开的文件调用 File.Delete(file_path) 时,尝试失败并出现无法访问错误,但是在退出应用程序时(从进行尝试的地方)文件被自动删除。 File.Delete 尝试后,路径将无法进行任何其他操作。

我需要要么删除失败并让路径可以通过应用程序访问,要么完全删除文件,而不是在应用程序退出时。

我的代码是这样的:

 private bool DeleteFilesAsync(string FileToDelete)
{
try
{
//Set file's attribute to normal if it is ReadOnly file
File.SetAttributes(FileToDelete, FileAttributes.Normal);

File.Delete(FileToDelete);
//Some bussiness logic to update file's status in database

return true;
}
catch (Exception ex)
{
//log the error
return false;
}
}

这里有什么问题吗?

最佳答案

Windows 确实具有最后关闭时删除的功能。所有删除都以这种方式处理。这在实践中几乎从未发生的唯一原因是因为大多数应用程序不使用 FILE_SHARE_DELETE 打开文件,因此无法删除已使用的文件。但在内核级别,所有删除都是关闭时删除。

可能有一种方法可以通过调用 NtSetInformationFile 来设置 FileDispositionInfo 类来清除删除标志。这假定可以清除删除标志。很可能是。

无论如何,更明智的方法是在删除文件之前打开文件以确保独占访问可用:

using(new FileStream(path, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) { }

此行无一异常(exception)地通过后,我们知道该文件在打开时未被使用。当然,它可能会在这行之后立即被其他人打开,但也许这个解决方案对您来说已经足够了。

关于c# - File.Delete 尝试删除打开的文件失败但在进程退出时删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13208690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com