【问题标题】:Multiple opening of temporary file only in same process仅在同一进程中多次打开临时文件
【发布时间】:2012-05-15 14:57:34
【问题描述】:

我对@9​​87654321@ 标记的文件有疑问。 首先,这是我想做的:

我有一个 DLL,它接受一个文件名,并在内部打开该文件并从中读取。我不知道这个文件是如何在里面处理的。 我要提供给该 DLL 的文件将由我的进程创建。它必须是一个临时文件,并且它的数据必须只保存在 RAM 中,并且不能被其他进程访问。所以我将 Win32 函数 CreateFile()FILE_ATTRIBUTE_TEMPORARYFILE_FLAG_DELETE_ON_CLOSE 一起使用。到目前为止,这很有效。

我有一个测试代码,用于测试文件是否可以在仍然打开的情况下再次访问。这里是:

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 对象打开。

【问题讨论】:

    标签: c++ winapi file-io temporary-files


    【解决方案1】:

    如果我是你,我会保留打开文件的句柄,并将其传递给 DLL 代码,而不使用文件名,因为如果你尝试访问,可能会在某些时候遇到访问限制使用“正常”文件访问的临时、关闭时删除文件。

    可以在 fstream 对象中使用 Windows 句柄,如以下答案所述:https://stackoverflow.com/a/476014/393701

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      相关资源
      最近更新 更多