Witam.
Korzystam z prostego skryptu (linux) wykorzystującego polecenie dd do odczytu i zapisu kart Compact Flash. Próbuje przenieść tą funkcjonalność do windowsa, jednak pojawia się problem przy zapisie na kartę.

#include <stdio.h>
#include <stdlib.h>
#define BUFFSIZE  65536

char Dysk[]="\\\\.\\PHYSICALDRIVE6";
char  Plik[]="d:\\raw.img";
FILE   *Source,*Destination;
char  Buffor[BUFFSIZE];
size_t  ile,ile2,ile3,ile4;

int main(int argc, char *argv[])
{
  if((Source=fopen(Plik,"rb"))==NULL) printf("Nie moglem otworzyc pliku\n");
  if((Destination=fopen(Dysk,"r+b"))==NULL) printf("Nie moglem otworzyc dysku\n");
  rewind(Destination);
  while(!feof(Source)){
    ile=fread(Buffor,sizeof(char),BUFFSIZE,Source);
    if(ferror(Source)) printf("Wystapil blad przy odczycie pliku\n");
    ile2=ile2+ile;

    ile3=fwrite(Buffor,sizeof(char),ile,Destination);
    ile4=ile4+ile3;
    
    printf("Odczytalem %i bajtow Zapisalem %i bajtow\r",ile2,ile4);
    
    if(ferror(Source)) printf("Wystapil blad przy zapisie pliku\n");
  }
  

  if(fclose(Source)) printf("Nie moglem zamknac pliku\n");
  if(fclose(Destination)) printf("Nie moglem zamknac dysku\n");
  printf("\n");
  system("PAUSE");	
  return 0;
}

Aplikacja zwraca ciekawe wartości, nie zawsze takie same np:

Odczytalem 523321344 bajtow Zapisalem 445906944 bajtow
Aby kontynuować, naciśnij dowolny klawisz . . .

Najczęściej zatrzymuje się na takiej wartości. Czasami udaje jej się zapisać całość.

Dodam że w WMI rozmiar karty pamięci jest mniejszy niż jej faktyczna wartość którą można z niej odczytać.

Bardzo proszę o pomoc
Pozdrawiam