fread ließt nicht ordenlich ein
-
ach das funktioniert doch. man muss nur die parameter bei fread vertauschen:
richtig:
fread(buf, 1, sizeof(buf), file);
falsch:
fread(buf, sizeof(buf), 1, pFile);
-
doch so wie er es hat geht es da fread die anzahl der "lesevorgänge" angiebt
und wenn ich sizeof(buf) * 1 Byte lese (und sizeof(buf)=1024ist) dann gibt fread mir die anzahl der gelesen bytes zurück wenn man aber so mit fread umgeht dann kann man sich mit mir auf eine stufe stellen und sollte das programmieren lieber lassen denn im den fall ist fread schwieriger vom code und sogar langsamer als fgetc.
-
ich denke da wird nicht byteweise eingelesen.
-
also ich meine der wird intern wohl size * count direkt einlesen.
-
benutz einfach die datei ein/ausgabe möglichkeiten von c++. da gibts nicht so ein behinderten count parameter.
-
so sieht fread bei visual c++ aus. skippy könnte recht haben mit dem byteweise...
-
oder doch nicht:
da wird ja folgendes gemacht:
if ( (count = total = size * num) == 0 )
na ja ich halt mich besser raus.
-
@denker
if ( (count = total = size * num) == 0 )Es wird nicht byteweise gelesen. Files sind gepuffert und es wird size * num auf einmal in den Ausgabebuffer kopiert ( wenn genug im inputbuffer ist ).
Kurt
-
jo alles klar danke. hatte das stückchen ja auch schon entdeckt aber der quelltext ist ziemlich kompliziert geschrieben. da kann man sich nie so sicher sein.

ich hab auch mit nem api spy programm nachgeguckt. dort wird ReadFile mit 4096 aufgerufen. also skippy das kannste beruhigt benutzen, wobei ich nicht ganz verstehen kann warum du c und c++ so mischt. dein quelltext sieht nach c mit klassen aus.

-
so ich habe das jetzt so gemacht (funktioniert auch)
while(!feof(resource)) { sizeRead=fread( buf,1, sizeof(buf)-1, resource); buf [24] = '\0'; if(feof(resource))continue; send(s_, buf, sizeRead, 0); } } fclose(resource); }hab dazu ne frage zu folgender zeile buf [24] = '\0';
müsste ich das jetzt nich ersetzen durch buf [sizeRead+1] = '\0';
-
Das mit dem feof haste ja scheisse gemacht.
-
@hinweis wieso? hat das nen speziellen grund oder nur aus geschwindigkeitsgründen
@denker ich nutze dewegen beides (c und c++) da sich manche sachen eben besser oder schneller in c schreiben lassen oder die c funktion eben von den parametern einfach besser in dem funktionsablauf des programmes passt
wenn ich assembler können würde würdich sogar versuchen bestimmte sachen eben mit eingebauten assembler machen
übrigens das dateien gebuffert ausgelesen werden ist mir schon klar da windows daten immer nur sektorweise ausließt (daher selbst wenn man ein zeichen auslesen will ließt windows den kompletten sektor aus )
ich meinte eher die verarbeitung daher den overhat der schleifen
aber geeirt hab ich mich trotzdem fread arbeitet immer byteweise schön zusehen war
an eurem zitierten beispiel
if ( (count = total = size * num) == 0 )und weiter unten folgte nämlich die mainloop(so in der art)
while(count >= 0)
{
lese und verabreite dateicount--
}also ist es egal da die funktion ja auch nur bytweise arbeitet
-
Dieses --count passiert nur in einem speziellen Fall!
Die Funktion arbeitet nicht byteweise.