Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   While FileExists endlosschleife (https://www.delphipraxis.net/191629-while-fileexists-endlosschleife.html)

Innovation 3. Feb 2017 14:55

Delphi-Version: 5

While FileExists endlosschleife
 
Hallo

Ich versche gerade meinem Tool beizubringen Textdateien mit einer fortlaufenden Nummer (damit keine Datei überschrieben wird )zu erstellen.
Es wird außerdem das Datum mit in den Dateinamen geschrieben
Code:
var
  Datestring, sDir: string;
  f : TextFile;
  helpint : Integer;

begin

  DateString := DateToStr(now);
  helpint :=1;
  //HIER WIRD GEGEBENENFALLS EIN ORDNER ANGELEGT
  sDir :='C:\XML Compare Fehlerbericht\Fehlerbericht\';
  if not DirectoryExists(sDir)then
    ForceDirectories(sDir);
  //HIER MEINE ENDLOSSCHLEIFE
  if FileExists(sDir+(IntToStr(helpint))+'.'+datestring+'.txt') then
  begin
    while FileExists(sDir+(IntToStr(helpint))+'.'+datestring+'.txt')do
    begin
      Inc(helpint);
      AssignFile(f,sDir+(IntToStr(helpint))+'.'+datestring+'.txt');
      Rewrite(f);
      CloseFile(f);
    end;
  end;

  //WENN KEIN FILE DANN ERSTELLE FILE Z.B.(C:\XML Compare Fehlerbericht\Fehlerbericht\1.03.02.2017.txt)
  if not FileExists(sDir+IntToStr(helpint)+'.'+datestring+'.txt')then
    AssignFile(f,sDir+(IntToStr(helpint))+'.'+datestring+'.txt');
    Rewrite(f);
    CloseFile(f);
end;
Wie macht man das richtig?
Bin total festgefahren und acuh noch ein Anfänger^^

MfG

Neutral General 3. Feb 2017 15:00

AW: While FileExists endlosschleife
 
Naja wenn die Datei schon existiert erhöhst du helpInt um 1 und erstellst eine Datei mit dieser neuen Nummer.
Danach kommst du wieder zur while-Schleife die nachschaut ob die gerade angelegte Datei existiert (natürlich existiert sie - du hast sie ja gerade angelegt...)

Innovation 3. Feb 2017 15:10

AW: While FileExists endlosschleife
 
Würde das dann nicht eine schon vorhandene datei überschrieben?

es Existieren:
1.03.02.2017.txt //if exist ... inc(helpint)
2.03.02.2017.txt // wird überschrieben
3.03.02.2017.txt
4.03.02.2017.txt

oder sehe ich das falsch?

Brainshock 3. Feb 2017 15:23

AW: While FileExists endlosschleife
 
Code:
 
AssignFile(f,sDir+(IntToStr(helpint))+'.'+datestring+'.txt');
Rewrite(f);
CloseFile(f);
muss glaub ich aus der while-Schleife raus und dahinter landen.
Die while-Schleife muss nur das helpint erhöhen, bis die Datei nicht mehr gefunden wird.

Innovation 3. Feb 2017 15:27

AW: While FileExists endlosschleife
 
Zitat:

muss glaub ich aus der while-Schleife raus und dahinter landen.
Die while-Schleife muss nur das helpint erhöhen, bis die Datei nicht mehr gefunden wird
Ohh mein Gott das ich das nciht selber gesehen habe.
Danke es funktioniert.

Jumpy 3. Feb 2017 15:28

AW: While FileExists endlosschleife
 
Sinnvoller / Einfacher ist es erst nur den Dateinamen zu ermitteln (Variable benutzen) und dann einmalig zu schreiben also sowas:

Delphi-Quellcode:
Filename:=sDir+(IntToStr(helpint))+'.'+datestring+'.txt';
while FileExists(Filename) do
  begin
  inc(helpint);
  Filename:=sDir+(IntToStr(helpint))+'.'+datestring+'.txt';
  end;
AssignFile(f,Filename);
    Rewrite(f);
    CloseFile(f);

p80286 3. Feb 2017 15:32

AW: While FileExists endlosschleife
 
Ich hätte da was (uralt und wohl nicht State of the Art)
Delphi-Quellcode:
procedure GetListofGenerationFiles(const muster:string;var liste:tstringlist);
begin
  liste.Clear;
  Liste:=DATEILISTE(muster+'.G*');
  liste.Sort;
end;

function GENERATEGENERATIONFILE(muster:string):string;
var
  i   : integer;
  dummy: string;
  dint : string;
  fl  : tstringlist;
begin
  i:=length(muster);
  while (i>0) and (muster[i]<>'.') and (muster[i]<>'\') do dec(i);
  if i>0 then begin
    if muster[i]='\' then dummy:=muster
    else dummy:=copy(muster,1,i-1);
  end
  else
    dummy:=muster;
  fl:=tstringlist.create;
  GetListofGenerationFiles(dummy,fl);
  if fl.count=0 then i:=0
  else begin
    i:=strtoint(copy(fl[fl.count-1],length(fl[fl.count-1])-1,2));
    i:=i+1;
  end;
  dint:=inttostr(i);
  while length(dint)<2 do dint:='0'+dint;
  dummy:=dummy+'.G'+dint;
  fl.free;
  result:=dummy;
end;{-- GENERATEGENERATIONFILE -----------------------------}
Das schaut nach Dateien MUSTER+'.Gxxx' und liefert die nächste Nummer, bzw. den Dateinamen zurück.
Ich seh' gerade, da fehlt noch ein fl.sort sonst ist nicht sichergestellt, daß die Einträge wirklich sortiert sind.
Hinter DATEILISTE verbirgt sich ein getfirst/getnextfile.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf