2015-08-04 2 views
-2

Im essayant de mapper le fichier en mémoire et utiliser MapViewOfFile(), mais il échoue avec le code d'erreur 6. J'ai essayé à peu près n'importe quoi, je lis aussi sur les gros fichiers étant le problème , mais le problème arrive aussi avec un fichier de 1kb.échecs MapViewOfFile avec errorCode 6 (Handle Invalid)

mon code:

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; 
    } 

la sortie est la suivante:

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

La sortie ne correspond pas au code. En fait, le code ne compile même pas. Qu'est-ce que 'FILE_MAP_ACCESS'? – IInspectable

+2

Votre vérification d'erreur et la manipulation est très bâclée. CreateFileMapping() renvoie NULL en cas d'échec. Utiliser GetLastError() après avoir utilisé printf() est fondamentalement faux. L'utilisation de PAGE_EXECUTE_READWRITE sur un fichier texte n'a aucun sens. –

Répondre

1

ici:

POIGNÉE hFile = CreateFile (pfile, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

Remplacer GENERIC_READ avec GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE

De plus il n'y a pas FILE_MAP_ACCESS, mais FILE_MAP_ALL_ACCESS.

J'ai essayé ce code et il mappe le fichier de test avec succès, je ne sais pas ce que vous voulez en faire. Aussi pour l'inspection des problèmes, vous pouvez également utiliser: Procmon.exe de sysinternals - il vous rapportera les problèmes qui se sont produits lors des manipulations de fichiers.