我有一个关于FILE_ATTRIBUTE_TEMPORARY
标记文件的问题。首先,这是我想要做的:
我有一个 DLL,它采用文件名,并在内部打开该文件并从中读取。我不知道这个文件是如何在里面处理的。我要提供给该 DLL 的文件将由我的进程创建。它必须是一个临时文件,并且它的数据必须只保存在 RAM 中,并且不能被其他进程访问。所以我使用 Win32函数CreateFile()
和FILE_ATTRIBUTE_TEMPORARY
. FILE_FLAG_DELETE_ON_CLOSE
到目前为止,这很好。
我有一个 tes 代码,我在其中测试文件是否可以在仍然打开的情况下再次访问。这里是:
HANDLE WINHandle = CreateFile("TempFileWIN.txt", (GENERIC_WRITE | GENERIC_READ) ,(FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE), 0, CREATE_ALWAYS, (FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE), 0);
ifstream ifs("TempFileWIN.txt", (ios::in | ios::trunc));
if(ifs.is_open())
{
cout << "Success!" << endl;
}
else if(ifs.fail())
{
cout << "Failed!" << endl;
}
我正在使用 fstream 来测试文件是否可以用流打开。上面的代码不起作用。输出为“失败!”。我知道,该文件可以用 CreateFile 再次打开。我检查过了。但是想知道是否可以通过与(例如)fstream 一起使用的外部 DLL 打开文件。
我希望你能帮我解决这个问题。此致。
编辑:也许一个更好的问题是我如何将文件锁定到我的进程并确保它永远不能被其他进程访问(即使我的进程被杀死)。该文件必须可以使用 C++ fstream 对象打开。