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