WIN API, Dopisywanie liczb do wektora zmapowanego w pamieci operacyjnej

0

Witam, prosze o pomoc z n/w programem. Nie wiem dlaczego nie dopisuje mi do jednego wektora V, liczb z wewktora V2.

#include <windows.h>
#include <cstdlib>
#include<cstdio>
using namespace std;
#define BYTEStoREAD  14
int main()   										// Mapp1
{
DWORD readed = 0, writed=0, n=0;
char buf[BYTEStoREAD],   buf1[BYTEStoREAD];
char nameF[] = "C:\\Users\\Ja\\Desktop\\V.txt";
double V[18] = {2,4,5,6,6,3,2,2.1,3,4,4.32,5.5}, V1[18], V2[4]={6,4,3.5,1}, V3[18], *pB ;
HANDLE  f, ff, fm, b, fa;

//---Zapisanie do pliku V.txt wektora lliczb double
     f = CreateFile(nameF, GENERIC_WRITE,0,0, CREATE_ALWAYS, 0, 0);
          WriteFile(f, V, 96, &writed, NULL);
     printf("Rozmiar pliku f: %d WritedV: %d  \n", GetFileSize(f, NULL), writed);
     CloseHandle(f);

//---Odczytanie pliku i prawdzenie/wydruk kontrolny

    ff = CreateFile(nameF, GENERIC_READ,0,0,OPEN_EXISTING , 0, 0);
      ReadFile(ff, (double*)V1, 96, &readed, NULL);
    printf("ReadedV1: %d\n", readed);
    printf("Tablica V-rozmiar: %d , Tablica V1-rozmiar %d \n", sizeof(V), sizeof(V1));
            while (n<12){
            printf("%d - %.2f \n",n+1, V1[n]);
            n++;}
     CloseHandle(ff);


    b = CreateFile(nameF, GENERIC_WRITE|GENERIC_READ,0,0, OPEN_EXISTING, 0, 0);

//--------------Utworzenie obiektu reprezentujacego plik zmapowany
    fm = CreateFileMapping(
    b,				 	     // wskaznik na ObiektPlikowy od  CreateFile
    NULL,					// standardowe atrybuty bezpieczenstwa
    PAGE_READWRITE,		    // czytanie i pisanie (powiazany z 2-gim param. CreateFile)
    0,					    // maly plik
    sizeof(V),			// rozmiar pliku
    NULL );				    // bez wlasnej nazwy

//---- Przydział PAO plikowi
    pB = (double*)MapViewOfFile(
    fm,					       // uchwyt zwrócony przez  CreateFileMapping
    FILE_MAP_WRITE,			   // tylko do pisania
    0,					       // maly plik
    0,					       // mapowanie od poczatek pliku
    0  );					   // mapowania calego pliku */

    memcpy(pB+writed, V2 , 50);           // bezposredni zapis do PAO
    UnmapViewOfFile((void *)pB);            // zwolnienie pamieci przeznaczonej na odwzorowanie pliku
    CloseHandle(b);        // zamkniecie uchwytow do Obiektów j¹dra*/

    readed=0;
    fa = CreateFile(nameF, GENERIC_READ,0,0, OPEN_EXISTING, 0, 0);
    ReadFile(fa, V1, 150, &readed, NULL);
    printf("ReadedV1: %d\n", readed);
    printf("Tablica V-rozmiar: %d , Tablica V1-rozmiar %d \n", sizeof(V1), sizeof(V1));
    CloseHandle(ff);

            n=0;
            while (n<16){
            printf("%d - %.2f \n",n+1, V1[n]);
            n++;}

    /*FILE *pF = fopen(nameF, "r");
    fread(V3, sizeof(V1),18, pF);
    fclose(pF);
    n=0;
            while (n<17){
            printf("%d - %.2f \n",n+1, V3[n]);
            n++;}*/



/*

/* puts("Odczyt funkcjami systemu Windows po modyfikacji");
ff = CreateFile(nameF, GENERIC_READ, 0,0, OPEN_EXISTING, 0,0);
 printf("rozmiar pliku: %d \n", GetFileSize(ff, NULL));
ReadFile(ff, buf1, BYTEStoREAD, &readed, NULL);
puts(buf1);

CloseHandle(ff);
 FILE *pF = fopen(nameF, "r");
    while ((zn=getc(pF)) !=EOF) putc(zn, stdout);
    fclose(pF);

puts("-----Odczyt kontrolny funkcjami jezyka C++");
char zn;
FILE *pF = fopen(nameF, "r");
while ((zn=getc(pF)) !=EOF) putc(zn, stdout);
fclose(pF);
// getchar(); */
return 0;
}
0

Rzutowanie na (VOID*) pierwszego parametru funkcji memcpy rozwiązało problem

0

Na podstawie czego stwierdziłeś że ci nie dopisuje?

0

Na podstawie wydruków kontrolnym za pomca funkcji Windowsowych oraz jezyka C - fread, zakomentowane nizej.

0

Wersja działajaca, jakby ktos potrzebował.

 #include <windows.h>
#include <cstdlib>
#include<cstdio>
using namespace std;
#define BYTEStoREAD  14
int main()   										// Mapp1
{
DWORD readed = 0, writed=0, n=0;
char buf[BYTEStoREAD],   buf1[BYTEStoREAD];
char nameF[] = "C:\\Users\\Ja\\Desktop\\V.txt";
double V[16] = {2,4,5,6,6,3,2,2.1,3,4,4.32,5.5}, V1[16], V2[4]={6.4,4,3.5,1}, V3[16], *pB=NULL, j=6.1  ;
HANDLE  f, ff, fm, b, fa;

//---Zapisanie do pliku V.txt wektora lliczb double
     f = CreateFile(nameF, GENERIC_WRITE,0,0, CREATE_ALWAYS, 0, 0);
          WriteFile(f, V, 96, &writed, NULL);
     printf("Rozmiar pliku f: %d WritedV: %d  \n", GetFileSize(f, NULL), writed);
     CloseHandle(f);

//---Odczytanie pliku i prawdzenie/wydruk kontrolny

    ff = CreateFile(nameF, GENERIC_READ,0,0,OPEN_EXISTING , 0, 0);
      ReadFile(ff, V1, 96, &readed, NULL);
    printf("ReadedV1: %d\n", readed);
    printf("Tablica V-rozmiar: %d , Tablica V1-rozmiar %d \n", sizeof(V), sizeof(V1));
            while (n<12){
            printf("%d - %.2f \n",n+1, V1[n]);
            n++;}
     CloseHandle(ff);


    b = CreateFile(nameF, GENERIC_WRITE|GENERIC_READ,0,0, OPEN_EXISTING, 0, 0);

//--------------Utworzenie obiektu reprezentujacego plik zmapowany
    fm = CreateFileMapping(
    b,				 	     // wskaznik na ObiektPlikowy od  CreateFile
    NULL,					// standardowe atrybuty bezpieczenstwa
    PAGE_READWRITE,		    // czytanie i pisanie (powiazany z 2-gim param. CreateFile)
    0,					    // maly plik
    150,			// rozmiar pliku
    NULL );				    // bez wlasnej nazwy
    if(fm==NULL) { printf("CreateFileMapping error: %d\n", GetLastError());
                        getchar(); return 1;}

//---- Przydział PAO plikowi
    pB = (double*)MapViewOfFile(
    fm,					       // uchwyt zwrócony przez  CreateFileMapping
    FILE_MAP_WRITE,			   // tylko do pisania
    0,					       // maly plik
    0,					       // mapowanie od poczatek pliku
    0  );					   // mapowania calego pliku */

    if(pB==NULL) { printf("CreateFileMapping error: %d\n", GetLastError());
                        getchar(); return 1;}
    printf("Adres pB: %d \n",pB);

    memcpy((VOID*)pB+writed, V2 , 32);           // bezposredni zapis do PAO

    UnmapViewOfFile((void *)pB);            // zwolnienie pamieci przeznaczonej na odwzorowanie pliku
    CloseHandle(b);
    CloseHandle(fm);        // zamkniecie uchwytow do Obiektów j¹dra*/

    readed=0;
    fa = CreateFile(nameF, GENERIC_READ,0,0, OPEN_EXISTING, 0, 0);
    ReadFile(fa, V3, 150, &readed, NULL);
    printf("ReadedV1: %d\n", readed);
    printf("Tablica V-rozmiar: %d , Tablica V1-rozmiar %d \n", sizeof(V1), sizeof(V1));
    CloseHandle(fa);

            n=0;
            while (n<16){
            printf("%d - %.2f \n",n+1, V3[n]);
            n++;}

           

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