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

Winapi 删除临时文件时发生Win32文件权限共享冲突,winapi,file-permissions,Winapi,File Permissions,我有一个应用程序,试图通过以下方式实现“安全文件覆盖”: 创建文件(a) 用数据填充A 通过将A复制到其最终目的地(B) 使用删除A 但是,在步骤4DeleteFile中,始终返回错误\u共享\u冲突。整个过程需要毫秒,所以我无法想象还有谁会干扰我的文件。有几个问题: 是否有更好的Win32(C/C++)技术来执行上述操作 如何获得有关阻止我删除文件A的“其他进程”的更多信息 如何轻轻地(眨眼-眨眼-微动)强制Windows删除我的临时文件 欢迎任何其他建议我的最佳猜测是您需要执行步骤2.5)关

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

  • 创建文件(
    a
  • 用数据填充
    A
  • 通过将
    A
    复制到其最终目的地(
    B
  • 使用删除
    A
  • 但是,在步骤4
    DeleteFile
    中,始终返回错误\u共享\u冲突。整个过程需要毫秒,所以我无法想象还有谁会干扰我的文件。有几个问题:

  • 是否有更好的Win32(C/C++)技术来执行上述操作
  • 如何获得有关阻止我删除文件
    A
    的“其他进程”的更多信息
  • 如何轻轻地(眨眼-眨眼-微动)强制Windows删除我的临时文件

  • 欢迎任何其他建议

    我的最佳猜测是您需要执行步骤2.5)关闭在1)中创建的文件句柄

    您使用什么创建/打开文件

    如果使用CreateFile,请确保在调用delete之前关闭文件句柄,或者确保指定共享标志
    file\u SHARE\u delete

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

    您可能还希望通过使用Win32 API简化文件代码的复制。

    删除文件的一种方法是打开文件,并在关闭文件的最后一个句柄后请求操作系统自动删除该文件。如果使用
    file\u SHARE\u READ
    创建文件,则
    SHFileOperation
    应该能够读取该文件以进行复制,然后可以立即关闭该文件的句柄。当shell关闭文件句柄时,文件将自动删除。

    • 尝试使用www.sysinternals.com中的Handles.exe查看文件是否正在使用以及如何使用

    • 您可以使用GetLastError和FormatMessage获取有关上次失败函数的更多信息:

    一些示例代码:

    char tx2[1024];
    
    DWORD l;
    
    if(l = GetLastError())
    {
        LPVOID lpMessageBuffer = 0;
        FormatMessage(
            FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
            NULL,
            l,
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //The user default language
            (LPTSTR) &lpMessageBuffer,    
            0,
            NULL
        );
    
        SetLastError(0);
        MessageBox(NULL, tx2, "MyApplication", MB_ICONINFORMATION | MB_OK | (MB_SETFOREGROUND | MB_TOPMOST | MB_TASKMODAL));
    }
    

    你能粘贴所有步骤的代码吗?你正在运行防病毒软件吗?我想他在每次使用他的功能时都会遇到这个问题,所以不需要这样做。