![]() |
Problem bei Datei-Erstellung
Hallo,
ich möchte, dass auf Knopfdruck eine neue Datei erstellt wird, deren Dateiname sich immer um eins erhöht!. Das funktioniert auch soweit, aber ich muss von Hand immer die nullte Datei erstellen und finde den Fehler nicht, warum das so ist! Vielleicht seht ihr ja den Fehler und könnt mir helfen!
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i, x: integer; begin x := 0; for i := 0 to FileListBox1.Count - 1 do begin If not Fileexists(inttoStr(x) + SaveDialog1.Filter) then begin Memo1.Lines.SaveToFile(IntToStr(x) + SaveDialog1.Filter); end else inc(x); Memo1.Lines.SaveToFile(IntToStr(x) + SaveDialog1.Filter); end; FileListBox1.Update; end; |
Re: Problem bei Datei-Erstellung
Moin,
ich bin mir nicht ganz sicher, ob ich wirklich verstanden habe, was du machen willst und was schief läuft, aber du hast auf jeden Fall beim "else" den begin/end-Block vergessen:
Delphi-Quellcode:
Vielleicht klappt es ja schon damit.
procedure TForm1.Button1Click(Sender: TObject);
var i, x: integer; begin x := 0; for i := 0 to FileListBox1.Count - 1 do begin If not Fileexists(inttoStr(x) + SaveDialog1.Filter) then begin Memo1.Lines.SaveToFile(IntToStr(x) + SaveDialog1.Filter); end else begin inc(x); Memo1.Lines.SaveToFile(IntToStr(x) + SaveDialog1.Filter); end; end; FileListBox1.Update; end; Ansonsten könnte man das Ganze auch etwas vereinfachen, wenn ich mich gerade nicht vertue:
Delphi-Quellcode:
Vielleicht klappts ja damit. Ansonsten müsstest du noch mal genauer beschreiben, was eigentlich nicht klappt. Wird Datei 0 gar nicht geschrieben oder steht das falsche drin?
procedure TForm1.Button1Click(Sender: TObject);
var i, x: integer; begin x := 0; for i := 0 to FileListBox1.Count - 1 do begin If fileexists(inttoStr(x) + SaveDialog1.Filter) then inc(x) Memo1.Lines.SaveToFile(IntToStr(x) + SaveDialog1.Filter); end; FileListBox1.Update; end; Bis denn Bommel |
Re: Problem bei Datei-Erstellung
Warum nimmst du nicht die Zählvariable der Schleife für die Dateinamen?
|
Re: Problem bei Datei-Erstellung
Guten Morgen,
ich habe es mal etwas umgeformt.
Delphi-Quellcode:
Bei Deiner Version fehlt ein begin end block.
procedure TForm1.Button1Click(Sender: TObject);
var i, x: integer; begin x := 0; for i := 0 to FileListBox1.Count - 1 do begin while Fileexists(inttoStr(x) + SaveDialog1.Filter) do inc(x); Memo1.Lines.SaveToFile(IntToStr(x) + SaveDialog1.Filter); end; FileListBox1.Update; end; @Luckie Zitat:
Grüße Klaus |
Re: Problem bei Datei-Erstellung
Wenn die Eigenschaft
![]() |
Re: Problem bei Datei-Erstellung
@Klaus
Die 0.txt wird immer noch nicht erstellt! Dafür verdoppeln sich mit while mit jedem Klick die Anzahl der Dateien! |
Re: Problem bei Datei-Erstellung
Hi!
Anstatt
Delphi-Quellcode:
solltest du
If not Fileexists(inttoStr(x) + SaveDialog1.Filter) then
begin Memo1.Lines.SaveToFile(IntToStr(x) + SaveDialog1.Filter); end else inc(x); Memo1.Lines.SaveToFile(IntToStr(x) + SaveDialog1.Filter);
Delphi-Quellcode:
versuchen.
If not Fileexists(inttoStr(x) + '.DeineEndung') then
begin Memo1.Lines.SaveToFile(IntToStr(x) + '.DeineEndung'); end else begin inc(x); Memo1.Lines.SaveToFile(IntToStr(x) + '.DeineEndung'); end; |
Re: Problem bei Datei-Erstellung
Ich hab´s jetzt unelegant gelöst:
Delphi-Quellcode:
x := 0;
If not FileExists('0.txt') then begin FileCreate('0.txt') end; for i := 0 to FileListBox1.Count - 1 do begin ... |
Re: Problem bei Datei-Erstellung
Hallo,
solange die Datei 0.txt nicht existiert, bleibt wahrscheinlich deine FileListBox leer und deine Schleife wird garnicht erst betreten - ergo wird auch die Datei 0.txt nie angelegt.
Delphi-Quellcode:
Diese Methode funktioniert bei einer kleinen Anzahl Dateien, aber besser wäre es, wenn du dir einfach die zuletzt verwendete Dateinummer merkst. In einer Single-User Umgebung ist das trivial, bei mehreren Benutzern würde ich das Verzeichnis überwachen.
function NextFileNumber(dir, ext: string): Integer;
begin dir := IncludeTrailingPathDelimiter(dir); Result := 0; while FileExists(Format('%s%d%s', [dir, Result, ext])) do Inc(Result); end; procedure TForm1.Button1Click(Sender: TObject); var n: integer; begin n := NextFileNumber(S_DIR, '.txt'); Memo1.Lines.SaveToFile(IntToStr(n) + '.txt'); FileListBox1.Update; end; EDIT: Wenn du alle Dateinamen sowieso in einer FileListBox vorhältst, dann kannst du die Funktion NextFileNumber() auch ohne Zugriff auf das Dateisystem implementieren.
Delphi-Quellcode:
Die Semantik ist hier aber geringfügig anders - Lücken werden nicht berücksichtigt.
function NextFileNumber(files: TStrings): Integer;
var i, n, nMax: Integer; begin nMax := -1; for i := 0 to Pred(files.Count) do begin n := StrToIntDef(ChangeFileExt(ExtractFileName(files[i]), ''), -1); if n > nMax then nMax := n; end; Result := Succ(nMax); end; Getippt und nicht getestet. Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:25 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 by Thomas Breitkreuz