Datei kopieren

Hi,

Ich versuche in meinem Programm eine Datei stückchenweise zu lesen und dann wieder stückchenweise zu schreiben, aber es klappt irgendwie nicht richtig.
Mache ich irgendetwas dummes falsch ?

int main(int argc, char\* argv[])
{
 FILE \*fh\_in;
 FILE \*fh\_out;
 BYTE Chunk[256]; 
 long filesize;
 long chunksize = 256;
 long bytesread = 0;

 fh\_in = fopen( "Test\_in.mp3", "rb" );
 fh\_out = fopen( "Test\_out.mp3", "wb" );

 fseek( fh\_in, 0, SEEK\_END );
 filesize = ftell(fh\_in);
 fseek( fh\_in, 0, SEEK\_SET );

 printf("Datei Groesse : %i\n", filesize);

 while( fread( Chunk, chunksize, 1, fh\_in ) )
 {
 bytesread += chunksize;

 if( bytesread \> filesize - chunksize )
 chunksize = filesize - bytesread;

 fwrite( Chunk, chunksize, 1, fh\_out );

 }

 printf("%i Bytes gelesen\n", bytesread );
 printf("Fertig\n");

 fclose(fh\_in);
 fclose(fh\_out);

 return 0;
}

Wenn ich die ganze Datei in einen Buffer auf einmal einlese und dann schreibe, klappt es, aber so wie oben hat die kopierte MP3 eine andere Grösse als die Original Datei…

Gruß,

Marc

Hi,

-> auch Hi !

Ich versuche in meinem Programm eine Datei stückchenweise zu
lesen und dann wieder stückchenweise zu schreiben, aber es
klappt irgendwie nicht richtig.
Mache ich irgendetwas dummes falsch ?

->Ja. Die Abfrage in der Schleife reduziert ‚chunksize‘ zu früh, sodass ein paar Byte nicht mehr gelesen werde. Und: Wenn das Proggi aus der Schleife rausspringt, enthält ‚Chunk‘ noch immer ein paar Byte, die jetzt noch geschrieben werden müssen. So sollte es gehen :

*schnippel*

while( fread( Chunk, chunksize, 1, fh\_in ) )
{
 if( bytesread \> filesize -chunksize )
 chunksize = filesize - bytesread;

 bytesread += chunksize;
 fwrite( Chunk, chunksize, 1, fh\_out );
}

if( bytesread \> filesize -chunksize )
 chunksize = filesize - bytesread;

bytesread += chunksize;
fwrite( Chunk, chunksize, 1, fh\_out );

printf("%i Bytes gelesen\n", bytesread );

*schnippel*

Viel Erfolg,
Hans

int main(int argc, char* argv[])
{
FILE *fh_in;
FILE *fh_out;
BYTE Chunk[256];
long filesize;
long chunksize = 256;
long bytesread = 0;

fh_in = fopen( „Test_in.mp3“, „rb“ );
fh_out = fopen( „Test_out.mp3“, „wb“ );

fseek( fh_in, 0, SEEK_END );
filesize = ftell(fh_in);
fseek( fh_in, 0, SEEK_SET );

printf(„Datei Groesse : %i\n“, filesize);

while( fread( Chunk, chunksize, 1, fh_in ) )
{
bytesread += chunksize;

if( bytesread > filesize - chunksize )
chunksize = filesize - bytesread;

fwrite( Chunk, chunksize, 1, fh_out );

}

printf("%i Bytes gelesen\n", bytesread );
printf(„Fertig\n“);

fclose(fh_in);
fclose(fh_out);

return 0;
}

Wenn ich die ganze Datei in einen Buffer auf einmal einlese
und dann schreibe, klappt es, aber so wie oben hat die
kopierte MP3 eine andere Grösse als die Original Datei…

Gruß,

Marc