Trionyx Гость
|
Добавлено: Вс Июн 06 2004 12:47 Заголовок сообщения: В чем ошибка (MFC) |
|
|
Возникла проблема с чтением файла с помощью CreateFile()
Суть в следующем: Создал проект в VC++ (MFC) SDI.
Переопределил функцию OnFileOpen()
Код: | void CMainFrame::OnFileOpen()
{
CString PathName;
CMainFrame* pFrame = static_cast<CMainFrame*>(AfxGetMainWnd());
CLegDoc *pDoc = (CLegDoc*) pFrame->GetActiveDocument();
HANDLE hFile, hFileMapping;
DWORD dwMaximumSizeHigh = NULL, dwMaximumSizeLow = NULL;
LPDWORD lpFileSizeHigh = NULL;
CFileDialog fileDlgOpen (TRUE, "", "*.txt",
OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, "Data Files (*.txt)|", this);
if (fileDlgOpen.DoModal()==IDOK)
{
PathName = fileDlgOpen.GetPathName();
wsprintf(buffer,"%s",fileDlgOpen.GetPathName());
CFile file(PathName, CFile::modeRead);
file.SeekToBegin(); //ставим на начало, чтобы не было дополнительных строк
hFile = CreateFile( PathName, GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
dwMaximumSizeHigh = GetFileSize(hFile,NULL);
hFileMapping = CreateFileMapping( hFile, NULL, PAGE_READONLY,
0, dwMaximumSizeHigh, NULL);
LPVOID lpvFile = MapViewOfFile(
hFileMapping, // Дескриптор объекта "Проецируемый файл"
FILE_MAP_READ, // Режим доступа
0, // Старшие 32 разряда смещения от начала файла,
0, // младшие 32 разряда смещения от начала файла
0 // и количество отображаемых байт. 0 - весь файл.
);
str.Format("%s",(char *)lpvFile);
CloseHandle(hFileMapping);
CloseHandle(hFile);
file.Close();
} |
Функция CreateFile при этом дает INVALID_HANDLE_VALUE;
Однако если тотже код вставить в ф - цию Serialize() все работает нормально
Пример
Код: | void CLegDoc::Serialize(CArchive& ar)
{
HANDLE hFile, hFileMapping;
DWORD dwMaximumSizeHigh = NULL, dwMaximumSizeLow = NULL;
LPDWORD lpFileSizeHigh = NULL;
PCSTR pszName = ar.m_strFileName;
CString str;
if (ar.IsStoring())
{
}
else
{
hFile = CreateFile( ar.m_strFileName, GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
dwMaximumSizeHigh = GetFileSize(hFile,NULL);
hFileMapping = CreateFileMapping( hFile, NULL, PAGE_READONLY,
0, dwMaximumSizeHigh, NULL);
LPVOID lpvFile = MapViewOfFile(
hFileMapping, // Дескриптор объекта "Проецируемый файл"
FILE_MAP_READ, // Режим доступа
0, // Старшие 32 разряда смещения от начала файла,
0, // младшие 32 разряда смещения от начала файла
0 // и количество отображаемых байт. 0 - весь файл.
);
str.Format("%s",(char *)lpvFile);
CloseHandle(hFileMapping);
CloseHandle(hFile);
}
} |
Прошу помочь разобраться |
|