![]() |
Problem mit speichern einer Stringliste
Delphi-Quellcode:
Warum bekomme ich hier immer zum Schluss den Fehler, dass die Datei nicht erstellt werden könnte?
function RewriteBookmarkFile(sl: TStrings; Filename: string): Cardinal;
var slBookmarkFile: TStringList; outerLoop, innerLoop: Cardinal; Count: Cardinal; begin Count := 0; slBookmarkFile := TStringList.Create; try slBookmarkFile.LoadFromFile(Filename); for outerLoop := 0 to sl.Count - 1 do begin for innerLoop := slBookmarkFile.Count - 1 downto 0 do begin if pos(sl.Strings[outerLoop], slBookmarkFile.Strings[innerLoop]) > 0 then begin slBookmarkFile.Delete(innerLoop); Inc(Count); end; end; end; slBookmarkFile.SaveToFile(Filename); finally FreeAndNil(slBookmarkFile); end; result := Count; end; |
Re: Problem mit speichern einer Stringliste
Hmpf. Der Fehler muss wo anders liegen.
Delphi-Quellcode:
Mit diesem Aufruf geht es tadellos.
procedure TForm1.Button2Click(Sender: TObject);
var sl: TStringList; Count: Cardinal; begin sl := TStringList.Create; try sl.Add('2'); sl.Add('6'); sl.Add('4'); sl.Add('7'); Count := RewriteBookmarkFile(sl, ExtractFilepath(ParamStr(0))+'test.txt'); finally FreeAndNil(sl); end; end; Aber hier nicht:
Delphi-Quellcode:
Aber ich sehe keinen Unterschied.
procedure TForm1.btnNextClick(Sender: TObject);
var AllowChange: Boolean; sl: TStringList; Loop: Cardinal; pidl: PItemIDList; FavPath: array[0..MAX_PATH] of Char; Count: Cardinal; s: String; resourcestring strEndMessage1 = 'Es wurde(n) %d Link(s) aus den Favoriten gelöscht'; begin if LastPage then begin sl := TStringList.Create; try Count := 0; DeadLinks(sl); // User selected links in the listview if sl.Count > 0 then begin if ... then begin // Bookmark-File else begin Count := RewriteBookmarkFile(sl, edtFilename.Text); end; end; finally FreeAndNil(sl); end; // some more code end; |
Re: Problem mit speichern einer Stringliste
Moin Luckie,
hast Du auch sichergestellt, dass die Datei nicht schreibgeschützt ist? Übrigens solltest Du Deine Schleifenzähler mal als integer und nicht als cardinal deklarieren, sonst bekommst Du unerfreuliche Ergebnisse, wenn mindestens einer der beiden TStringList.Count gleich 0 ist, da der Wert count-1 dann nicht als -1 interpretiert wird. Wofür hast Du noch die Variable Count deklariert? Dafür kannst Du doch direkt Result verwenden. |
Re: Problem mit speichern einer Stringliste
Nein, sie ist leider nicht schreibgeschützt. Ich habe echt keinen Plan und bin am verzweifeln, weil ich den Unterschied einfach nicht sehe.
Count habe ich deklariert, weil Hagen mal erklärt hatte, dass man result ganz zum Schluss zuweisen sollte, damit der Compiler den Code dahingegen optomieren kann, dass die CPU das Regsiter für result irgendwie nutzen kann oder so ähnlich. Wenn ich es finde poste ich es noch mal. Habs: Zitat:
|
Re: Problem mit speichern einer Stringliste
Moin Luckie,
also wenn die Datei nicht angelegt werden kann, könntest Du Dir vielleicht noch mal mit einem GetLastError weiterhelfen, um Näheres zu erfahren. |
Re: Problem mit speichern einer Stringliste
Zitat:
Mache ich das:
Delphi-Quellcode:
Wird mir gesagt, dass das System nicht auf die Datei zugreifen kann, da sie von einem anderen Prozess benutzt wird.
slBookmarkFile.LoadFromFile(Filename);
DeleteFile(Filename); |
Re: Problem mit speichern einer Stringliste
Kann es sein, dass FreeAndNil eine Datei einer StringListe nicht explizit schließt?
|
Re: Problem mit speichern einer Stringliste
Vergesst es. Ich habe die Datei an einer anderen Stelle nicht geschlossen. :wall: Das hat mich jetzt dreieinhalb Stunden gekostet. :evil:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 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