删除临时文件时Win32文件权限共享冲突

fbr*_*eto 2 winapi file-permissions

我有一个应用程序,我试图通过以下方式实现"安全文件覆盖":

  1. 创建文件(A)
  2. 填写 A数据
  3. 通过复制A到最终目的地(B)SHFileOperation
  4. 删除A使用DeleteFile

但是,在步骤4中,DeleteFile始终返回ERROR_SHARING_VIOLATION.整个过程需要几毫秒,所以我无法想象还有谁会干扰我的文件.几个问题:

  1. 是否有更好的Win32(C/C++)技术来执行上述操作?
  2. 如何获取有关阻止我删除文件的"其他进程"的更多信息A
  3. 我如何轻轻地(眨眨眼推动轻推)迫使Windows删除我的临时文件?

欢迎任何其他建议

Bri*_*ndy 5

我最好的猜测是你需要一个步骤2.5)关闭1)中创建的文件句柄

你用什么来创建/打开文件?

如果您使用CreateFile,请确保在调用delete之前关闭文件句柄,否则请确保指定共享标志FILE_SHARE_DELETE.

HANDLE hFile = CreateFile("C:\\test.txt", GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE |  FILE_SHARE_DELETE, NULL, CREATE_ALWAYS, 0, NULL);
Run Code Online (Sandbox Code Playgroud)

您可能还希望使用Win32 API CopyFile简化文件代码的复制.