2015-08-04 15 views
-2

Im пытается сопоставить файл с памятью и использовать MapViewOfFile(), но он не работает с кодом ошибки 6. Я пробовал практически все, я также читал о проблемах с большими файлами , но проблема возникает и с файлом 1kb.Ошибка MapViewOfFile с errorCode 6 (Invalid Handle)

мой код:

HANDLE hFile = CreateFile(pFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
    e = GetLastError(); 
    printf("CreateFile Errorcode %d\n", GetLastError()); 
    if (hFile == INVALID_HANDLE_VALUE) 
    { 
     printf("Error: could not create handle to file"); 
     printf("CreateFileMapping error code: %d", e) 
     return 1; 
    } 
    printf("successfully created a Handle to try.txt"); 
    HANDLE pMap = CreateFileMapping(hFile, NULL, PAGE_EXECUTE_READWRITE,0 ,0 ,NULL); 
    e = GetLastError(); 
    if (pMap == INVALID_HANDLE_VALUE) 
    { 
     printf("Error: Unable to CreateFileMapping\n"); 
     printf("CreateFileMapping error code: %d", e) 
     return 1; 
    } 
    printf("CreateFileMapping successfull.") 

    LPVOID lpBase MapViewOfFile(pMap, FILE_MAP_ACCESS| FILE_MAP_EXECUTE, 0, 0, 0); 
    e = GetLastError(); 
    if (!lpBase) 
    { 
     printf("Error: could not map file to memory"); 
     printf("MapViewOfFile Errorcode %d\n", GetLastError()); 
     CloseHandle(hFile); 
     UnmapViewOfFile(lpBase); 
     printf("closed hFile handle and unmapped lpBase.") 
     return 1; 
    } 

выход следующее:

>  successfully created a Handle to try.txt 
>  createFileMapping successfull 
>  Error: unable to MapViewOfFile 
>  MapViewOfFile errorcode: 6 
>  closed hFile handle and unmapped lpBase. 
+0

Выход не соответствует коду. На самом деле код даже не компилируется. Что такое 'FILE_MAP_ACCESS'? – IInspectable

+2

Ваша проверка и обработка ошибок очень неряшлива. CreateFileMapping() возвращает NULL, когда он терпит неудачу. Использование GetLastError() после использования printf() в корне неверно. Использование PAGE_EXECUTE_READWRITE в текстовом файле не имеет никакого смысла. –

ответ

1

здесь:

HANDLE hFile = CreateFile (Pfile, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

Заменить GENERIC_READ с GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE

Также нет FILE_MAP_ACCESS, но FILE_MAP_ALL_ACCESS.

Я пробовал этот код и с успехом сопоставлял тестовый файл, не уверен, что вы хотите с ним делать дальше. Также для проверки проблем вы также можете использовать: Procmon.exe из sysinternals - он сообщит вам, какие проблемы возникли во время манипуляций с файлами.

Смежные вопросы