Min*_*Mun 5 c++ windows winapi file
我想制作一个在打开时可以删除的文件ifstream。
我知道使用 Windows API 很容易: CreateFile
CreateFile(...,FILE_SHARE_DELETE,...)
Run Code Online (Sandbox Code Playgroud)
但是当我测试通过 ifstream 打开文件时。
一打开就删不掉
我没有找到任何关于设置属性的文档,比如FILE_SHARE_DELETEon ifstream。
我该怎么做才能解决这个问题?
Visual Studio 的版本std::ifstream有一个非标准构造函数和一个非标准open()重载,它们都有一个额外的可选_Prot参数来指定“文件保护/共享标志”(参见_fsopen()可用标志列表)。但是,delete共享不是受支持的标志之一。
不过,还有一种选择。Visual Studio 的版本std::ifstream和std::ofstream具有接受FILE*文件访问的非标准构造函数。例如,您可以使用 Microsoft和函数将HANDLEfrom包装CreateFile()到 a 中(为简洁起见,已删除错误处理):FILE*_open_osfhandle()_fdopen()
我可以使用 CreateFile,但将句柄强制转换为 std::ofstream 吗?
HANDLE file_handle = CreateFile(...,FILE_SHARE_DELETE,...);
int file_descriptor = _open_osfhandle((intptr_t)file_handle, _O_RDONLY);
FILE* file = _fdopen(file_descriptor, "r");
std::ifstream stream(file);
...
// Closes stream, file, file_descriptor, and file_handle.
stream.close();
Run Code Online (Sandbox Code Playgroud)
如果您需要对非 Microsoft 编译器更便携的东西,您可能不得不求助于编写自定义std::basic_streambuf类(或可能派生自std::filebuf)来包装您的HANDLE,然后将该类的对象std::basic_istream直接传递给构造函数。
| 归档时间: |
|
| 查看次数: |
458 次 |
| 最近记录: |