2012-05-15 3 views
0

FILE_ATTRIBUTE_TEMPORARY 개의 파일이 있습니다. 우선 내가하고 싶은 것은 다음과 같습니다.동일한 프로세스에서만 임시 파일을 여러 번 열었습니다.

파일 이름을 사용하는 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을 사용하고 있습니다. 그 코드는 작동하지 않습니다. 출력은 "Failed!"입니다. 두 번째로 CreateFile을 사용하여 파일을 열 수 있음을 알고 있습니다. 나는 그것을 조사했다. 그러나 (예를 들어) fstream과 함께 작동하는 외부 DLL로 파일을 열 수 있는지 알고 싶습니다.

이 문제로 저를 도울 수 있기를 바랍니다. 감사합니다.

편집 : 아마도 더 나은 질문은 내 프로세스에 파일을 잠그고 다른 프로세스 (내 프로세스가 종료 된 경우에도)에 액세스 할 수 없다는 것입니다. 이 파일은 C++ fstream 객체로 열 수 있어야합니다.

답변

0

내가 당신이라면, 오픈 파일의 핸들을 유지하고, DLL 코드에 전달, 당신은 당신이하려고하면 어떤 점에서 액세스 제한에 실행할 가능성이 있기 때문에하지 않는 파일 이름을 사용 '정상적인'파일 액세스를 사용하여 임시 삭제 삭제시 파일에 액세스하십시오. https://stackoverflow.com/a/476014/393701

:

은이 답변에 설명 된대로 fstream 객체에 윈도우 핸들을 사용할 수 있습니다

관련 문제