Page 1 of 1

Не могу сохранить файл в AkelPad 3.1.8

Posted: Fri Dec 22, 2006 2:21 pm
by ncode
Немогу сохранить файл в AkelPad 3.1.8 если он открвался через апишный CreateFileMapping() другим приложением.
Кусок кода для работы с каким-нибудь файлом в моем приложении:

Code: Select all

//открываю файл
RESULT TFileReader::Open(LPCTSTR file_name)
{
	FileHandle = ::CreateFile(file_name, GENERIC_READ, FILE_SHARE_READ, NULL, 
		OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN, NULL);
	if(false == ::IsHandleValid(FileHandle))
	{
		FileHandle = NULL;
		return R_UNABLE_OPEN_FILE;
	}
	const DWORD file_size = ::GetFileSize(FileHandle, NULL);
	if(INVALID_FILE_SIZE != file_size)
	{
		FileMappingHandle = ::CreateFileMapping(FileHandle, NULL, PAGE_READONLY, 0, 0, NULL);
		if(true == ::IsHandleValid(FileMappingHandle)) //false when file_size = 0
		{
			Begin = reinterpret_cast<TCHAR*>(::MapViewOfFile(FileMappingHandle, FILE_MAP_READ, 0, 0, 0));
			if(NULL != Begin)
			{
				End = Begin + file_size;
				Pos = static_cast<LPCTSTR>(Begin);
				return R_SUCCESS;
			}
		}
	}
	Close();
	return R_UNABLE_OPEN_FILE;
}

//
//здесь работаю с файлом
//

//закрываю файл
void TFileReader::Close()
{
	::CloseHandle(FileMappingHandle);
	::CloseHandle(FileHandle);
	FileMappingHandle = NULL;
	FileHandle = NULL;
	Begin = NULL;
	End = NULL;
}
После этого этот файл невозможно сохранить в AkelPad, пока не закроется мое приложение. Проверял метод Close() - выполняется успешно, закрывает все дескрипторы. Попробовал NotePad - все нормально в данном случае работает.

P.S. А может я где-то ошибаюсь?

Posted: Fri Dec 22, 2006 2:35 pm
by Instructor
Возможно:
- FILE_SHARE_READ|FILE_SHARE_WRITE
- UnmapViewOfFile

Posted: Fri Dec 22, 2006 2:43 pm
by ncode
Instructor wrote:Возможно:
- FILE_SHARE_READ|FILE_SHARE_WRITE
- UnmapViewOfFile
Да похоже, что оно. Интересно почему NotePad это игнорирует.

Posted: Fri Dec 22, 2006 2:49 pm
by Instructor
Кто его знает :)