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
DeleteFile
中,始终返回错误\u共享\u冲突。整个过程需要毫秒,所以我无法想象还有谁会干扰我的文件。有几个问题:
A
的“其他进程”的更多信息欢迎任何其他建议我的最佳猜测是您需要执行步骤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));
}
你能粘贴所有步骤的代码吗?你正在运行防病毒软件吗?我想他在每次使用他的功能时都会遇到这个问题,所以不需要这样做。