2013-07-17 4 views
0

다른 프로세스에서 매핑 된 파일로 열리는 동안 파일에 쓰려고하는데 실패합니다.FileMapped 쓰기 액세스

코드의 조각을보고하십시오 : 현재 파일에서

access = GENERIC_READ | GENERIC_WRITE; 
share = FILE_SHARE_READ | FILE_SHARE_WRITE; 
disposition = OPEN_EXISTING; 

HANDLE fileHandle = CreateFileA(fileName.c_str(), access, share, 0, disposition, 0); 

//... 

unsigned long valProtect = 0; 

//... 

valProtect = PAGE_READWRITE; 

//... 

const HANDLE mappingHandle = CreateFileMapping(fileHandle, 0, valProtect, 0, 0, 0); 


//... 

this->m_access = FILE_MAP_ALL_ACCESS; 

//... 

this->m_startAddress = (uint8_t*)MapViewOfFile(mappingHandle, this->m_access, 0, 0, 0); 

//... 

CloseHandle(fileHandle); 

는 (그것의 핸들)를 폐쇄하지만 주소 공간에 매핑됩니다. 나는 ++ 메모장에서이 파일을 열어 수정하고 저장하려고하지만, 내가 볼 메시지 :

".이 파일이 다른 프로그램에서 열려 있는지 확인하십시오"

다른 프로세스에서 다시 쓸 수 없으므로 쓰기 권한이 잠긴 것으로 보입니다. 그럼 다시 파일을 다시 작성할 수 없습니다

UnmapViewOfFile(this->m_startAddress); 

: 나는 같은 파일을 매핑되지 않은 경우

.

내가 뭘 잘못 했니?

답변

1

메모장 + +는 독점 파일에 쓸 때 액세스하려고 시도 할 가능성이 있으며, 매핑 (또는 파일을 사용하는 다른 것)이 아직 열려있는 동안 실패합니다. 많은 응용 프로그램은 파일에 쓸 때 독점적 인 액세스 권한을 얻으므로 다른 프로세스에서 쓰기가 완료 될 때까지 데이터를 읽지 않습니다. 파일을 공유하고 있지만 Notepad ++는 단순히 너무 많은 권한을 요구하고 있습니다. 코드에 대해 할 수있는 일은 없습니다.