Witajcie!
Mam dziwny problem z funkcją GetFileSize z Win32API. Do rzeczy:
Piszę program, który otwiera sobie plik binarny zawierający tablicę int'ów. Następnie dopisuje gdzieś w środku 2 wartości. Wszystko działa fajnie, tylko, że wygląda na to, że GetFileSize jakoś nie jest aktualizowane, czy cuś:| jest tak:
Plik zawiera tablicę przykładowo 10 liczb: 19 57 15 95 43 90 74 5 42 35.
Pierwsze uruchomienie: program wyświetla wszystko prawidłowo. Dopisuję więc dwie liczby w środek:
19 7676 57 15 95 9898 43 90 74 5 42 35 i zamykam program.
Teraz odpalam program jeszcze raz, i co widzę?
19 7676 57 15 95 9898 43 90 74 5 - czyli dwóch wartości brakuje:|
A co się stanie, jeżeli wyświetle tablicę od 0 do GetFileSize+2?
19 7676 57 15 95 9898 43 90 74 5 42 35 :|
No dosłownie, jakby rozmiar pliku nie aktualizował się:|
Błagam o pomoc, gdyż jestem na skraju załamania nerwowego -_-'
void dopisz(int *oldFile, int *gdzie, int wielkosc, int ile)
{
int tab[2] = {7676, 9898};
int pom[wielkosc];
int zmiana[wielkosc+2];
memcpy(pom, oldFile, sizeof(pom));
int p = 0, m=0;
for(int k=0;k<wielkosc+2;k++)
{
if(k==gdzie[0] || k==gdzie[1])
{
zmiana[m] = tab[p];
p++;
}
else
{
zmiana[m] = pom[k-p];
}
m++;
}
memcpy(oldFile, &zmiana, sizeof(zmiana));
}
int main(int argc, char *argv[])
{
HANDLE hFile,hMapFile;
int *pMapFile;
hFile=CreateFile("moj.bin",GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
DWORD sizeF=GetFileSize(hFile,0);
hMapFile=CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,sizeF,NULL);
pMapFile=(int*)MapViewOfFile(hMapFile,FILE_MAP_ALL_ACCESS,0,0,0);
for(int i=1;i<sizeF/4;i++)
cout<<pMapFile[i]<<" ";
cout<<endl<<"dopisujemy:";
int gdzie[2]={2,6};
dopisz(pMapFile,gdzie,sizeF/4,2);
FlushViewOfFile(pMapFile,sizeof(pMapFile));
UnmapViewOfFile(pMapFile);
CloseHandle(hMapFile);CloseHandle(hFile);
HANDLE txtFile,txtMapFile,binFile,binMapFile;
char *txtpMapFile;
int *binpMapFile;
cout<<endl;
binFile=CreateFile("moj.bin",GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
sizeF=GetFileSize(binFile,0);
binMapFile=CreateFileMapping(binFile,NULL,PAGE_READWRITE,0,sizeF,NULL);
binpMapFile=(int*)MapViewOfFile(binMapFile,FILE_MAP_READ,0,0,0);
for(int i=1;i<sizeF/4+2;i++)
cout<<binpMapFile[i]<<" ";
UnmapViewOfFile(binFile);
CloseHandle(binpMapFile);CloseHandle(binMapFile);
system("PAUSE");
return EXIT_SUCCESS;
}