FILE_ATTRIBUTE_TEMPORARY
マークされたファイルについて質問があります。まず、これが私がやりたいことです:
私はファイル名を取り、そのファイルを内部で開いてそこから読み取るDLLを持っています。このファイルが内部でどのように処理されるのかわかりません。そのDLLに渡したいファイルは、私のプロセスによって作成されます。これは一時ファイルである必要があり、そのデータはRAMにのみ保持され、他のプロセスからアクセスされないようにする必要があります。そのため、Win32関数CreateFile()
をとでFILE_ATTRIBUTE_TEMPORARY
使用しFILE_FLAG_DELETE_ON_CLOSE
ます。これまでのところうまくいきます。
開いたままでファイルに2回アクセスできるかどうかをテストするテストコードがあります。ここにあります:
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を使用して、ファイルをストリームで開くことができるかどうかをテストしています。そこにあるそのコードは機能しません。出力は「Failed!」です。ファイルをCreateFileでもう一度開くことができることは知っています。私はそれをチェックしました。ただし、(たとえば)fstreamで動作する外部DLLによってファイルを開くことが可能かどうかを知りたい。
私はあなたがこの問題で私を助けてくれることを願っています。よろしくお願いします。
編集:おそらくより良い質問は、ファイルを自分のプロセスにロックして、他のプロセスからアクセスできないようにする方法です(プロセスが強制終了された場合でも)。ファイルは、C++fstreamオブジェクトで開くことができる必要があります。