Springen an best. Stelle in Datei (>8MB)
-
Du hast doch im anderen Thread ein Beispiel für CreateFile bekommen
-
Joe_M. schrieb:
TFileStream::Position.
-
So, nun öffne ich die Datei so:
HANDLE fp=CreateFile("Messdaten.txt", GENERIC_READ, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);Frage: Ist das OK so eine binär Datei zu öffnen?
Dann setze ich den Pointer:SetFilePointer(fp, curpos, NULL, FILE_BEGIN);und nun möchte ich an der Stelle ein Byte in die Variable byte1 einlesen...aber das bekomme ich nicht so recht hin...mein Versuch sieht so aus:
ReadFile(fp, &byte1, sizeof(byte1), 1, NULL);
-
StartERror schrieb:
Hierfür habe ich bisweilen die Funktion fseek verwendet! Doch leider kann man mit ihr maximal an die Position 8388608 spingen - entspricht also einer Dateigröße von 8MB!
keine ahnung was du machst, kann den dateizeiger bei mir aber problemlos auf 500mb verschieben.
-
Wirf doch bitte mal einen Blick auf TFileStream...
-
@ Sunday
FILE *fp; //Original fp = fopen("Datei.txt", "rb"); fseek(fp, curpos, SEEK_SET); fread(&byte1, sizeof(byte1),1,fp);...was mache ich falsch, wenn Du bi 500MB den Pointer verschieben kannst??
@Christian211
Was ist falsch an dem, was ich mit CreateFile tue?ReadFile(fp,&byte1, sizeof(byte1),NULL,NULL);Laut breakpoint lese ich das richtige aus...nur ich bekomme einen Fehler! ...liegt wohl an den zwei NULLern...aber was soll ich dahin schreiben? Habe keinen Pointer auf eine Variable, die wissen soll wieviele Byte in gelesen habe!
@ Joe_M.
Habe ich mir angesehen...verstehe aber noch nicht, wie ich das auf mein Problem anwenden soll.Danke Leute!
-
Mit TFileStream kann man Dateien mit Größen im Bereich von int64 bearbeiten.
-
Laut breakpoint lese ich das richtige aus...nur ich bekomme einen Fehler! ...liegt wohl an den zwei NULLern...aber was soll ich dahin schreiben? Habe keinen Pointer auf eine Variable, die wissen soll wieviele Byte in gelesen habe!
Die musst du anlegen
int anzahl; ReadFile(fp,&byte1, sizeof(byte1),&anzahl,NULL);
-
So, den Fehler habe ich nun Lokalisiert...er liegt ein paar Zeilen drüber! ...nämlich beim Öffnen der Datei! fp ist nach zig Durchläufen aufeinmal NULL! (wobei die Datei größer wird) Auch ein erneutes Öffnen in diesem Fall bewirkt nichts! Es bleibt fp=NULL! So kann ich natürlich mit fseek und co nichts werden! Wenn die eine NULL übergeben bekommen.
Wo könnte der Fehler liegen? Danke für eure Geduld!
-
Kaum einer wird wissen, welche Variante du jetzt tatsächlich verwendest, deshalb wird dir auch kaum jemand sagen können, wo möglicherweise der Fehler liegt.
Offensichtlich ist aber, dass du dringend eine Fehlerbehandlung einbauen solltest, die so Sachen wie z.B. NULL-Handles abfängt.