- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我正在将数据写入文件句柄:
hFile = CreateFile(filename, GENERICREAD | GENERICWRITE, 0, null, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
//[snip error check]
try
{
if (!WriteFile(hFile, buffer, count, ref bytesWritten, null))
throw new Win32Exception(GetLastError());
}
finally
{
CloseHandle();
}
如果我的数据写入失败,我希望在关闭句柄时删除文件。即:我希望文件“un-CreatFile'd”。
<小时/>我已经尝试了显而易见的方法,如果出现问题,请删除该文件:
hFile = CreateFile(filename, GENERICREAD | GENERICWRITE, 0, null, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
//[snip error check]
try
{
try
{
if (!WriteFile(hFile, buffer, count, ref bytesWritten, null))
throw new Win32Exception(GetLastError());
}
finally
{
CloseHandle();
}
}
catch
{
DeleteFile(filename);
throw;
}
这种方法有两个问题:
我想要的是一种追溯指定的方法:
FILE_FLAG_DELETE_ON_CLOSE
: The file is to be deleted immediately after all of its handles are closed, which includes the specified handle and any other open or duplicated handles.
到我打开的文件。
我创建了这个文件!我当然可以取消它!都是因为我忘记事先指定一个标志?
最佳答案
在所有版本的 Windows 中,您都可以
FILE_SHARE_DELETE
。FILE_FLAG_DELETE_ON_CLOSE
CreateFile
文档中的 FILE_FLAG_DELETE_ON_CLOSE
描述对此进行了解释:
<小时/>The file is to be deleted immediately after all of its handles are closed, which includes the specified handle and any other open or duplicated handles. If there are existing open handles to a file, the call fails unless they were all opened with the
FILE_SHARE_DELETE
share mode.
如果自动删除不够好,您可以研究事务性 NTFS,将文件创建和所有写入放入事务中,然后在必要时回滚。
关于winapi - 如何取消创建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14572272/
我是一名优秀的程序员,十分优秀!