![]() |
AW: EOF beendet das Einlesen einer Datei vorzeitig
TStrings/TStringList hält sich an die Speicherbedingungen für PChar (0-terminitere Strings aus WinAPI/C++).
Eine "normale" Textdatei enthält eigentlich keine #0, aber ob und wie ein(e) Programm/Komponente die "Daten" in einer Datei interpretiert kann unterschiedlich sein. TStrings/TStringList reagiert "standardmäßig" nunmal auf gewisse Zeichen, wie eben #0, #10 und #13, denn es verhält sie wie TMemo, dessen interne Windows-Komponente nunmal mit PChar arbeitet. |
AW: EOF beendet das Einlesen einer Datei vorzeitig
Zitat:
einen Zustand festlegen... Ich bin ja für die Killerbienen... |
AW: EOF beendet das Einlesen einer Datei vorzeitig
Zitat:
|
AW: EOF beendet das Einlesen einer Datei vorzeitig
Nochmal eine andere sachen, wollte keinen neuen Thread dafür erstellen :)
Immer lese ich, wenn man irgendwas extern lädt, oder auch intern:
Delphi-Quellcode:
-> Warum denn diese Try Finally Schleife, und warum muss man das Bild am Ende wieder freigeben?
Bild1:=TBitmap.Create; //Bild1 wird erstellt.
Try Bild1.LoadfromFile(ExtractFilepath(ParamStr(0)) + 'Items\Bild1.bmp'); //Bild1 wird geladen. Finally Bild1.Free; End; -> Als ich heute mein Programm öffnen wollte, hat mir Delphi gesagt: RLINK32: Out of memory! Hat/Kann das was damit zu tun haben, dass ich Bilder nicht freigebe? -> Als ich gestern gesehen habe, das man Icons dem Programm hinzufügen kann, habe ich das gleich gemacht, jeder Form über dem Objektinspektor. Später habe ich gesehen, das man über Projekt->Optionen->Anwendung->Symbol->Symbol laden , das ebenfalls machen kann, und sicherheitshalber auch nochmal da das Symbol hinzugefügt habe. Aber ich glaube das war nicht so gut :pale::pale: Denn es kommt auch der Fehler: Doppelte Ressource (...,...) -> Man muss doch sicher alles freigeben, auch Textfiles und und und, oder? |
AW: EOF beendet das Einlesen einer Datei vorzeitig
Zitat:
|
AW: EOF beendet das Einlesen einer Datei vorzeitig
Zitat:
Ausnahmsweise per Stream und nicht wie sonst per Blockread/Write :stupid:
Delphi-Quellcode:
oder halt klassisch
Procedure CorrectFile(F:String);
var MS : TMemoryStream; I : Integer; P : PByte; begin MS := TMemoryStream.Create; try MS.LoadFromFile(F); // geändert MS.Position := 0; P := MS.Memory; For i:=0 to MS.Size-1 do begin if P^ = $1A then // Dateiende P^ := $20; inc(p); end; MS.SaveToFile(F); // geändert finally MS.Free; end; end;
Delphi-Quellcode:
Procedure CorrectFile(F:String);
var FD : File; Buffer : Array of byte; Size,I : Integer; begin AssignFile(FD,F); Reset(FD,1); try Size := FileSize(FD); Setlength(Buffer,Size); Blockread(fd,Buffer[0],Size); Seek(FD,0); For i:=0 to Size-1 do if Buffer[i] = $1A then Buffer[i] := $20; Blockwrite(FD,Buffer[0],Size); finally Closefile(FD); end; end; Mavarik |
AW: EOF beendet das Einlesen einer Datei vorzeitig
Ein paar Ressourcenschutzblöcke wären nicht schlecht, und kann man sich die erste FileStream-Instanz nicht sparen und stattdessen LoadFromFile des MemoryStream nehmen, oder überseh ich da etwas?
|
AW: EOF beendet das Einlesen einer Datei vorzeitig
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz