Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Freien Dateinamen finden (https://www.delphipraxis.net/102222-freien-dateinamen-finden.html)

N30N 25. Okt 2007 09:41


Freien Dateinamen finden
 
Hi,

Ich habe in meinem Verzeichniss Dateien mit dem Namen 1.txt,2.txt etc. liegen. Mit meinem Code versuche ich, einen Dateinamen zu finden, der noch nicht vergeben ist.

Delphi-Quellcode:
var
i : integer;
begin
  for i := 1 to 100 do
    begin
      if fileexists ('c:\' + inttostr(i) + '.txt') then
        edit28.text := ('Freie Zahl wird gesucht')
      else
        edit28.Text := inttostr(i);
    end;
Jetzt hab ich 2 Probleme:

1) Die for Schleife scheint nicht das beste zu sein, ich hätte am liebsten eine Schleife die ins unendliche geht.
2) Komischerweise wird nach der Abfrage im Editfeld immer "100" angezeigt. Normalerweise müsste doch, wenn es eine freie Stelle gibt, die passende Zahl im Editfeld erscheinen. Ich hab bestimmt nen Logikfehler :/


//Edit:

Ahhh, Logikfehler gefunden ^^ Die Schleife wird ja immer wieder durchgelaufen, bis 100. Klar, dass dann 100 im Feld erscheint.

mkinzler 25. Okt 2007 09:43

Re: Freien Dateinamen finden
 
Schau mal nach FindFirst/FindNext()

N30N 25. Okt 2007 10:05

Re: Freien Dateinamen finden
 
Also wenn ich den Delphi-Hilfe Text richtig verstanden habe, dann dient Findfirst / Findnext dazu, um Dateien zu finden. Aber ich suche ja ne einen freien Dateinamen.

Jedenfalls bekomm ich es so nicht gebacken :/

Reinhard Kern 25. Okt 2007 10:10

Re: Freien Dateinamen finden
 
Zitat:

Zitat von N30N
Hi,

Ich habe in meinem Verzeichniss Dateien mit dem Namen 1.txt,2.txt etc. liegen. Mit meinem Code versuche ich, einen Dateinamen zu finden, der noch nicht vergeben ist.
...
.

Hallo,

es ist nicht sehr intelligent, jedesmal von 1 an zu suchen - ich würde im Programm einen Parameter "letzte Dateinummer" verwalten, so dass nach 10 Speichervorgängen automatisch eine Datei 11 angelegt wird. Die Schleife brauchst du trotzdem, weil ja was schiefgehen kann und die 11 bereits besetzt ist, dann must du wieder eine freie Nummer suchen, aber eben nur dann.

Gruss Reinhard

nachti1505 25. Okt 2007 10:13

Re: Freien Dateinamen finden
 
Delphi-Quellcode:
var bFileFound: boolean;
    i: Integer;
procedure DoIt;
begin
  bFileFound := false;
  i := 0;
  repeat
    inc(i);
    if not FileExists('C:\' + IntToStr(i) + '.txt') then bFileFound := true;
  until bFileFound;

  // nächste freie Dateinummer steht jetzt in i
end;

nachti1505 25. Okt 2007 10:16

Re: Freien Dateinamen finden
 
Zitat:

Zitat von Reinhard Kern
Hallo,

es ist nicht sehr intelligent, jedesmal von 1 an zu suchen - ich würde im Programm einen Parameter "letzte Dateinummer" verwalten, so dass nach 10 Speichervorgängen automatisch eine Datei 11 angelegt wird. Die Schleife brauchst du trotzdem, weil ja was schiefgehen kann und die 11 bereits besetzt ist, dann must du wieder eine freie Nummer suchen, aber eben nur dann.

Gruss Reinhard

Das setzt voraus, dass nur sein Programm die Dateien erstellt!!! Dem scheint aber nicht so:
Zitat:

Ich habe in meinem Verzeichniss Dateien mit dem Namen 1.txt,2.txt etc. liegen.
Für seine Aufgabenstellung ist es durchaus intelligent von eins an zu suchen.

N30N 25. Okt 2007 10:36

Re: Freien Dateinamen finden
 
Zitat:

Zitat von nachti1505
Delphi-Quellcode:
var bFileFound: boolean;
    i: Integer;
procedure DoIt;
begin
  bFileFound := false;
  i := 0;
  repeat
    inc(i);
    if not FileExists('C:\' + IntToStr(i) + '.txt') then bFileFound := true;
  until bFileFound;

  // nächste freie Dateinummer steht jetzt in i
end;


Das scheint mir ganz logisch zu sein, danke schonmal. Aber wozu dient das "procedure DoIt;" unter der Variablendeklaration?


Delphi-Quellcode:
var
  bFileFound: boolean;
  i: Integer;
begin
  bFileFound := false;
  i := 0;
  repeat
    inc(i);
    if not FileExists('C:\' + IntToStr(i) + '.txt') then bFileFound := true;
  until bFileFound;
  edit28.Text := inttostr(i);
Ausserdem gibts da noch ein kleines Problem. Ich musste das "procedure DoIt;" aus deinem Code löschen, da ich sonst nur Fehlermeldungen bekam. Wenn ich den Code jetzt ausführe, erscheint im Editfeld jedes Mal die Zahl 1. Die Datei 1.txt gibt´s allerdings schon, genau wie die Datei 2.txt... :(



//Edit:

Okay, hab ne Kleinigkeit verpennt, jetzt funktioniert es! :)

Danke :)

peschai 25. Okt 2007 10:44

Re: Freien Dateinamen finden
 
schaut euch mal die windows API funktion an
Delphi-Quellcode:
GetTempFileName

SirThornberry 25. Okt 2007 10:57

Re: Freien Dateinamen finden
 
kurz und bündig:
Delphi-Quellcode:
var
  i : Integer;
begin
  i = 1;
  while FileExists('c:\' + inttostr(i) + '.txt') do
    inc(i);

  showmessage('Freier Dateiname: ' + 'c:\' + inttostr(i) + '.txt');


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:49 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