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:
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;
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.
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:
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;
Die Semantik ist hier aber geringfügig anders - Lücken werden nicht berücksichtigt.
Getippt und nicht getestet.
Grüße vom marabu