Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dateien eines verzeichnisses umbenennen (https://www.delphipraxis.net/57685-dateien-eines-verzeichnisses-umbenennen.html)

Bea 25. Nov 2005 08:13


Dateien eines verzeichnisses umbenennen
 
Hallo,
ich habe ein Verzeichnis mit folgenden Dateien:

Datei.001
Datei.002
Datei.003
Datei.004
Datei.005
...
usw.

Nun möchte ich folgendes machen:

Wenn irgendeine beliebige Datei dieses Verzeichnisses gelöscht wird (z.B. Datei.002), sollen alle anderen Dateien entsprechend umbenannt werden, sodass keine Zählerlücken entstehen.

Datei.001--> bleibt
Datei.003 --> umbenennen zu Datei.002
Datei.004 --> umbenennen zu Datei.003

Das Ergebnis sollte dann so aussehen:

Datei.001
Datei.002
Datei.003
Datei.004

Kann mir jemand sagen, wie soetwas geht?
Besten dank im Vorraus
Bea

Remote1 25. Nov 2005 08:21

Re: Dateien eines verzeichnisses umbenennen
 
einfach rename
oder mit:
Delphi-Quellcode:
//uses sysutil //glaub ich
MoveFile(PChar(OldName), PChar(NewName));
nur weiß ich nicht wie du das genau machen willst
wenn du zb mitteln win explorer ne datei umbenennst, dann müsste dein programm ja alle dateien unbenennen
-->bedeutet also, das es die ganze zeit im hintergrund laufen muss und das verzeichnis überwacht

aber versuchs mal mir rename (delphi hilfe bringt dich da auch noch weiter)

marabu 25. Nov 2005 08:24

Re: Dateien eines verzeichnisses umbenennen
 
Hallo Bea,

du wirst hoffentlich gute Gründe dafür haben die Namen lückenlos durchnummeriert zu halten. Allerdings würde ich nicht alle Namen umbennen, sondern beim Löschen von Datei 2 aus insgesamt 100 würde ich Datei.002 löschen und dann Datei.100 in Datei.002 umbenennen.

Grüße vom marabu

RavenIV 25. Nov 2005 08:25

Re: Dateien eines verzeichnisses umbenennen
 
als erstes nimmst du eine Komponente "DirMonitor" oder "FileMonitor". Diese sind bei JCL oder RX-Tools oder auch seperat erhältlich. Natürlich kannst du auch die Funktionen der WinAPI nehmen.
Dort registrierst Du dein Verzeichnis, damit Du bei Änderungen benachrichtigt wirst.

Nun prüfst du, welche Datei verschwunden ist und machst das Umbenennen der anderen dateien.

so einfach ist das. :-)

Bea 25. Nov 2005 09:51

Re: Dateien eines verzeichnisses umbenennen
 
Hallo,
zur Hintergrundinformation:

Die Dateien
Datei.001
Datei.002
Datei.003
...
sind im Grunde ein Dokument mit mehreren Seiten.

Datei.005 ist also die 5.Seite in dem Dokument.

Mein Programm geht nun jede Seite durch und schaut nach, ob es sich um eine Leerseite handelt und löscht diese dann.
Das hab ich auch alles schon fertig, da brauch ich keine Hilfe, das dient nur als Hintergrundinformation.
Um nun den Zusammenhang des Dokumentes wiederherzustellen, müssen die Seiten nach der gelöschten Seite umbenannt (Endung decrementieren) werden z.B.eben so:
Datei.001--> bleibt
Datei.003 --> umbenennen zu Datei.002
Datei.004 --> umbenennen zu Datei.003

Die reihenfolge der Seiten muss beibehalten werden.
Deshalb kann ich auch nicht, wie von marabu vorgeschlagen die Seite Datei.100 zu Datei.002 umbenennen.
Das muss schon die 100. bzw, nach dem Löschen einer Seite die 99. Seite bleiben.

Ich hoffe ich konnte das einigermaßen verständlich erklären.
Danke Bea

Luckie 25. Nov 2005 09:59

Re: Dateien eines verzeichnisses umbenennen
 
Dann benenn sie doch einfach mit Delphi-Referenz durchsuchenRenamefile wie gewünscht um. Wo ist das Problem?

Brüggendiek 25. Nov 2005 10:16

Re: Dateien eines verzeichnisses umbenennen
 
Hallo Bea!

Zitat:

Zitat von Bea
Mein Programm geht nun jede Seite durch und schaut nach, ob es sich um eine Leerseite handelt und löscht diese dann.

Wo ist das Problem?
Die Nummern sind doch aufsteigend belegt und ich nehme an, daß Du einen Zähler von 1 bis Maximum für die Prüfung hochzählst. Einfach eine weitere Variable mit dem neuen Seitenzähler mitlaufen lassen und wenn alte und neue Nummer ungleich sind, umbenennen.

Du ziehst doch Seiten nach vorne in die Lücke, also wird Nummer "n" gelöscht und dann "n+1" in "!n" umbenannt - das geht immer.
Das Einfügen einer neuen Datei wäre schon etwas aufwändiger.

Gruß

Dietmar Brüggendiek

eddy 25. Nov 2005 10:22

Re: Dateien eines verzeichnisses umbenennen
 
Hallo Bea,

so geht's:

Delphi-Quellcode:
const
  endwert = 100;
var
  j, i, akt, lst : integer;
  aerw, lerw : string[3];       // Aktuelle ERWeiterung, LetzteERWeiterung
  pfn, afn, lfn : string;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  pfn := 'c:\tmp\datei.';
  akt := 1;
  lst := 0;
  repeat
    aerw := IntToStr(akt);
    while length(aerw) < 3 do aerw := '0' + aerw;
    afn := pfn + aerw;
    if FileExists(afn) then begin
      inc(lst);
      if lst <> akt then begin
        lerw := IntToStr(lst);
        while length(lerw) < 3 do lerw := '0' + lerw;
        lfn := pfn + lerw;
        renameFile(afn, lfn);
      end;
    end;
    inc(akt);
  until akt > endwert;
end;
Optimieren kannst Du es sicherlich selbst.

mfg
eddy

Bea 25. Nov 2005 10:39

Re: Dateien eines verzeichnisses umbenennen
 
Oh, danke eddy, das funktioniert ja prima.
Nun muss ich mir das jetzt erstmal verinnerlichen, will ja auch was dabei lernen ;-).
Da brauch ich ja das Decrementieren der Werte 002, 003, 004 usw. gar nicht.

Also vielen Dank erstmal
Bea


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