Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Dateinamen um 1 erhöhen. (https://www.delphipraxis.net/14762-dateinamen-um-1-erhoehen.html)

axellang 15. Jan 2004 09:37


Dateinamen um 1 erhöhen.
 
Hallo Leute,

es geht um folgendes.

Wenn im Windows ein neuer Ordner, Textdatei oder, oder erstellt wird heißt dieser
"Neuer Ordner" der nächste "Neuer Ordner(2)" oder
"Neu Text Document.txt" die nächste "Neu Text Document (2).txt" usw.

Wie kann ich es in meiner App. machen das wenn ein Dateiname existiert ( FileExists) nicht erst die MsgBox kommt mit "wollen Sie die Datei überschreiben" sondern automatisch der Dateiname um eins erhöht wird.

Ich weiß das ich es irgendwo gesehen habe aber ich finde es nicht mehr. :gruebel:

Grüsse

Axel

MikeS 15. Jan 2004 09:41

Re: Dateinamen um 1 erhöhen.
 
hallo

Code:
var i: integer;

begin
i := 0;
if fileexists('name' + inttostr(i) + '.txt') then
assignfile(fromf, 'name' + inttostr(i+1) + '.txt';
end;
das dann noch in einer schleife bearbeitet in der du zum beispiel alle dateien des ordners zählst und die schleife dann von 1 bis gezählte laufen lässt und schaust ob es die schon gibt!
und dann eine neu anlegst die eins höher ist!

Cuchulainn 15. Jan 2004 10:00

Re: Dateinamen um 1 erhöhen.
 
Hallo,

ich habe es jetzt folgendermaßen gelöst. Und zwar will ich einfach mit SaveToFile den Inhalt von Memo1 in eine txt-Datei schreiben. Es geht bestimmt einfacher, aber so funktioniert es.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var StrPath: String;
    Search: TSearchRec;
    IntCounter: Integer;
const StrExtension = '.txt';

begin
     StrPath := ExtractFilePath(ParamStr(0)) + 'datei';
     if FindFirst(StrPath + '*' + StrExtension, faAnyfile, Search) <> 0 then
     begin
          // Datei speichern
          Memo1.Lines.SaveToFile(StrPath + StrExtension);
     end
     else
     begin
          IntCounter := 1;
          repeat
                StrPath := ExtractFilePath(ParamStr(0)) + 'datei(' + IntToStr(IntCounter) + ')' + StrExtension;
                Inc(IntCounter);
          until FindNext(Search) <> 0;
          Memo1.Lines.SaveToFile(StrPath);
     end;
     FindClose(Search);
end;

axellang 15. Jan 2004 12:33

Re: Dateinamen um 1 erhöhen.
 
Danke für die Antworten.
Damit kann ich was anfangen.

Gruß

Axel :)

scp 15. Jan 2004 13:35

Re: Dateinamen um 1 erhöhen.
 
Zitat:

Zitat von Cuchulainn
Es geht bestimmt einfacher, aber so funktioniert es.

Es mag zwar funktionieren, aber deine Variante mit FindFirst / FindNext findete auch Dateien wie "dateiX.txt" oder "dateihateinenlaengerennamen.txt" und nicht nur Zahlen. Von daher ist eine for-Schleife eleganter und zverlässiger:

Delphi-Quellcode:
var StrPath: String;
    Search: TSearchRec;
    IntCounter: Integer;
const StrExtension = '.txt';

begin
  StrPath := ExtractFilePath(ParamStr(0));
  If (length(StrPath) > 0) and (StrPath[length(StrPath)] = '\') then
    Delete(StrPath, length(StrPath), 1);
  StrPath := StrPath + '\' + 'datei';

  IntCounter := 0;
  If FileExists(StrPath + StrExtension) then
    begin
    IntCounter := 1;
    while FileExists(StrPath + IntToStr(IntCounter) + StrExtension) do
      Inc(IntCounter);
    end;
   
  If (IntCounter > 0) then
    StrPath := StrPath + IntToStr(IntCounter) + StrExtension
  else
    StrPath := StrPath + StrExtension);
end;

Neg 20. Jan 2004 22:51

Re: Dateinamen um 1 erhöhen.
 
Wie wäre es denn hiermit:

(edit: Oh, der Delphi-Code rückt ja gar nicht automatisch ein... Naja, egal...)

Delphi-Quellcode:
function GetGoodFileName(FileName: String): String;
var
tmp, path, ext: String;
i: integer;
begin
ext:=ExtractFileExt(FileName);
path:=copy(FileName, 1, length(FileName)-length(ext));
tmp:=FileName;
i:=1;

while NOT FileExists(tmp) do
begin
inc(i);
tmp:=path + '(' + IntToStr(i) + ')' + ext;
end;

Result:=tmp;
end;



procedure TForm1.Button1Click(Sender: TObject);
var tmp: String;
begin
if SaveDialog1.Execute then
begin
s:=GetGoodFileName(SaveDialog1.FileName);
// todo : Speichern in s
end;
end;
Wenn du den OverWritePrompt des SaveDialogs auf FALSE lässt (Voreinstellung), dann fragt er nicht nach, wenn man einen bereits existierenden Dateinamen angibt, sondern speichert in die entsprechend nummerierte Datei.

Der Thread ist zwar schon ein paar Tage alt, aber vielleicht hilft dir das ja doch noch... :bounce2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:11 Uhr.

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