![]() |
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:
Wie macht man das richtig?
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; Bin total festgefahren und acuh noch ein Anfänger^^ MfG |
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...) |
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? |
AW: While FileExists endlosschleife
Code:
muss glaub ich aus der while-Schleife raus und dahinter landen. AssignFile(f,sDir+(IntToStr(helpint))+'.'+datestring+'.txt'); Rewrite(f); CloseFile(f); Die while-Schleife muss nur das helpint erhöhen, bis die Datei nicht mehr gefunden wird. |
AW: While FileExists endlosschleife
Zitat:
Danke es funktioniert. |
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); |
AW: While FileExists endlosschleife
Ich hätte da was (uralt und wohl nicht State of the Art)
Delphi-Quellcode:
Das schaut nach Dateien MUSTER+'.Gxxx' und liefert die nächste Nummer, bzw. den Dateinamen zurück.
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 -----------------------------} 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 10:45 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