WINAPI - GetFileSize nie aktualizuje?

0

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

napisz sobie funkcyjkę:

size_t fsize(FILE* file) {
    fseek(file, 0, SEEK_END);
    size_t Size = ftell(file);
    rewind(file);
    return Size;
}

lepiej operować na plikach za pomocą standardowych libów. Osobiście polecam stdio :)
Tak samo nie używaj system... Jak już pisać programy to przynajmniej w miarę możliwości przenośne :P

0

TO może nie pomóc, gdyż gdy wyświetlam plik w wierszu poleceń, jego rozmiar nie zmienia się..O co chodzi?

0

koniecznie musi być to WinAPI?
Bo jak nie to przepisz to za pomocą bibliotek standardowych np.stdio czy fstream...

1

mażesz po pamięci poza rozmiarem tablicy i spodziewasz się, że plik magicznie zwiększy rozmiar.

1 użytkowników online, w tym zalogowanych: 0, gości: 1