PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C: dateien werden größer?



Badsteve
11-07-2003, 12:14
hi,

ich habe ein kleines Problem mit meinem copy Programm. Wenn ich eine Datei vom Typ *.jpg kopiere, dann wird die neue Datei größer als die alte.

Das Progamm:


#include <stdlib.h>
#include <stdio.h>

int main()
{
FILE *fpalt, *fpneu;
char buffer[1024];
int n,n2;

if( (fpalt= fopen("linux07.jpg", "r")) == NULL)
{
printf("open failed\n");
return 1;
}
if( (fpneu = fopen("neu.jpg", "w")) == NULL)
{
printf("open failed\n");
return 2;
}

while( !feof(fpalt))
{
n = fread(buffer,sizeof(char), 1024, fpalt);
if( n >0 )
{
n2 = fwrite(buffer, sizeof(char), 1024, fpneu);
}
}

fclose(fpneu);
fclose(fpalt);

return 0;
}


Steve

wraith
11-07-2003, 12:49
jpegs sind binär Dateien,also mußt du die auch binär (öffnen,schreiben,lesen).

Badsteve
11-07-2003, 13:16
Linux unterscheidet doch nicht zischen binär und text. Es bringt nichts "b" als Mode mitanzugeben unter Linux. Außerdem ist es doch so, dass fread und fwrite dazu da sind binäre Daten zu lesen/schreiben.


Steve

wraith
11-07-2003, 13:45
>>Linux unterscheidet doch nicht zischen binär und text
Wenn du deinen Code portable halten willst,dann gib "b" mit an.



n = fread(buffer,sizeof(char), 1024, fpalt);
if( n >0 )
{
n2 = fwrite(buffer, sizeof(char), 1024, fpneu);
}

hier schreibst du immer 1024 Bytes,egal wieiviele vorher gelesen werden konnten.

Badsteve
11-07-2003, 14:39
ohhh man. Danke, das habe ich wohl übersehen.


Steve

PS wenn der Code auf einem "nicht UNix" ausführbar sein soll, gebe ich b an.