Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 仅在同一进程中多次打开临时文件_C++_Winapi_File Io_Temporary Files - Fatal编程技术网

C++ 仅在同一进程中多次打开临时文件

C++ 仅在同一进程中多次打开临时文件,c++,winapi,file-io,temporary-files,C++,Winapi,File Io,Temporary Files,我有一个关于文件\u属性\u临时标记文件的问题。 首先,我想做的是: 我有一个DLL,它接受一个文件名,在内部打开该文件并从中读取。我不知道这个文件在里面是如何处理的。 我要提供给该DLL的文件将由我的进程创建。它必须是一个临时文件,其数据只能保存在RAM中,不能被其他进程访问。因此,我将Win32函数CreateFile()与FILE\u属性\u TEMPORARY以及关闭时的FILE\u标志\u DELETE\u一起使用。到目前为止,这很有效 我有一个tes代码,测试文件是否可以在打开时再次

我有一个关于
文件\u属性\u临时
标记文件的问题。
首先,我想做的是:

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

我有一个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;
}
HANDLE WINHandle=CreateFile(“TempFileWIN.txt”,(通用写通用读),(文件共享读文件共享写文件共享删除),0,创建总是,(文件属性临时文件标志删除打开关闭),0);
ifstream-ifs(“TempFileWIN.txt”,(ios::in | ios::trunc));
if(if.is_open())
{

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

可以在fstream对象中使用Windows句柄,如以下回答中所述: