Funkcje Systemu Win, odczyt pliku.

0

Witam :)
Mam pewien problem. Otóż ku mojemu wielkiemu zdziwieniu poniższy kod nie działa jak powinien. Wczytuje 35 z 624 bajtów. Czyli częśc wygenerowanej macierzy. Mogę prosić o pomoc? Kod:

 #include <windows.h>
#include <stdio.h>
 
DWORD INVALID_SET_FILE = 0xFFFFFFFF;
 
int main()                          
{
DWORD  readed = 0;
HANDLE hFile;// Uchwyt do pliku
 
int o=0,k=0;
double it=1.1;
double it2=1.1;
double M[13][6];
 
for(o=0;o<13;o++){
                  
    for(k=0;k<6;k++){
                  
                  
           M[o][k]= it;     
                  it=it+0.1;
                  
                  }              
                  it=it-0.6;
                  it=it+1;
                  
                  
                  }
 
for(o=0;o<13;o++){
                  
    for(k=0;k<6;k++){
                  
                  
       printf("%.2f ", M[o][k]);
                  
                  }              
                  
                  printf("\n");
                  
                  } 
char nameFile[33] ="C:\\plik1.txt" ;
 
hFile = CreateFile(         
     nameFile,                 
     GENERIC_READ|GENERIC_WRITE,    
     0,
     0,     
     OPEN_EXISTING,  
     FILE_ATTRIBUTE_NORMAL,   
     NULL );                
   if (hFile == INVALID_HANDLE_VALUE) {
            printf("CreateFile error %d.\n", GetLastError()) ;
            getchar(); return (1); }
 
 
BOOL bResult = WriteFile(     
            hFile,          
M, 
sizeof(M), 
&readed, 
NULL) ; 
   if (!bResult) { printf("WriteFile error %d.\n", GetLastError()) ;
                   getchar(); return (3); }
 
if(readed == sizeof(M)) printf("Pelny Zapis zakonczony pomyslnie\n");
   else printf("Zapisno %d ze %d bajtow zalozonych\n", readed, sizeof(M));
 
CloseHandle(hFile);
 
system("pause");
printf("\n\nZ pliku, funkcjami C++: \n");
 

double a[13][6];
FILE *pF = fopen(nameFile, "r");
int ile;
while (feof(pF) == 0)
    {
ile = fread(a,sizeof(double), (13*6),pF);
}



if(ile==sizeof(M))printf("Pelny Odczyt zakonczony pomyslnie\n");
   else printf("Odczytano %d ze %d bajtow zalozonych\n", ile, sizeof(M));

for(o=0;o<13;o++){
                  
           for(k=0;k<6;k++)
           {                 
           printf("%.2f ", a[o][k]);                 
           }
           printf("\n");
                  
}
 
fclose(pF);
printf("\n");
system("pause");
 
return 0;
}
0
  1. Dlaczego do zapisu pliku używasz funkcji z windows.h, a do odczytu z stdio.h?
  2. Plik powinieneś otworzyć w trybie binarnym "rb".
  3. Funckja fread() zwraca liczbę odczytanych obiektów, a nie bajtów.
  4. Ta pętla jest bez sensu
while (feof(pF) == 0)
{
    ile = fread(a, sizeof(double), (13 * 6), pF);
}

bo za każdym razem nadpisujesz wartość zmiennej ile.

0

Eh, racja. rb pomogło. Pisałem windows.h a odczytywałem c bo taki był wymóg mojego prowadzącego laborki ;P

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