(win32)Fichier et buffer en lecture seule

mogwai93 Messages postés 361 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 19 mars 2015 - 27 janv. 2010 à 08:30
mogwai93 Messages postés 361 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 19 mars 2015 - 28 janv. 2010 à 21:18
Bonjour

Je voudrais lire un fichier, placer le contenu de ce fichier dans un buffer
et modifier ce buffer (mais pas le fichier).

J'arrive bien à ouvrir le fichier et à le charger dans le buffer
or le buffer semble être en lecture seule
impossible de modifier un octet de ce buffer

voici la partie de code qui doit poser problème :
J'ai essayé avec PAGE_READONLY, FILE_MAP_WRITE|FILE_MAP_READ, mais je n'ai pas dû trouver la bonne combinaison


hFile = CreateFile(Fichier_In, GENERIC_READ, FILE_SHARE_READ| FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
MessageBox(hwnd, "Erreur CreateFile", "Info", MB_OK);
return 0;
}
dwSize = GetFileSize(hFile, NULL);

hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);
if (!hFileMapping)
{
MessageBox(hwnd, "Erreur CreateFileMapping", "Info", MB_OK);
CloseHandle(hFile);
return 0;
}

lpMapStart = (LPBYTE)MapViewOfFile(hFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
if (!lpMapStart)
{
MessageBox(hwnd, "Erreur MapViewOfFile", "Info", MB_OK);
CloseHandle(hFileMapping);
CloseHandle(hFile);
return 0;
}

Val = lpMapStart[0];		// Fonctionne : la valeur lue est correcte
lpMapStart[0] = 1;		// Plante

UnmapViewOfFile(lpMapStart);
CloseHandle(hFileMapping);
CloseHandle(hFile);



merci

2 réponses

fregolo52 Messages postés 1115 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 3
27 janv. 2010 à 10:39
salut,

je connais mal les mémoires partagées, mais pourquoi ne fais-tu pas comme dans la MSDN (vu que tu as "dwSize") :
- 1er paramètre de CreateFileMapping : INVALID_HANDLE_VALUE
- tu stockes ton fichier dans un buffer (char *)
- tu copie ce buffer dans la mémoire partagée
0
mogwai93 Messages postés 361 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 19 mars 2015
28 janv. 2010 à 21:18
en fait, je m'étais plutôt inspiré de l'autre exemple :
MSDN

j'ai réussi en rajoutant GENERIC_WRITE au CreateFile

et en mettant dwSize en dernier paramètre de MapViewOfFile
0