Entwickler-Ecke
Dateizugriff - Viele Ordner umbennenen
naleh - Mo 03.11.03 20:34
Titel: Viele Ordner umbennenen
Hallo,
ich hab in einem Programm ein TShellListview und möchte alle Ordner (viele) darin umbennenen (mit Zahlen). Ich hab jetzt folgende Procedure da stehen, und die funzt auch teilweise, aber manche Ordner lässt er einfach aus. Mit der Fehlermeldung (wenn ich FOF_SILENT rausmach):
| Zitat: |
| Datei kann nicht umbennant werden: Wählen sie nur eine Datei, oder verwenden sie den MS-DOS-Platzhalter (z.B. *.txt), um eine Gruppe von Dateien mit ähnlichen Namen umzubennen. |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| procedure TForm2.Button2Click(Sender: TObject); var i,nummer:integer; begin nummer:=StrToInt(edit1.Text); For i := 0 to ShellListview1.Items.Count-1 do begin sleep(10); RenameDir( shelllistview1.Folders[i].PathName, ExtractFileDir (shelllistview1.Folders[i].PathName) +'\'+IntToStr(nummer) ); inc(nummer); end; end;
procedure TForm2.RenameDir(DirFrom, DirTo: string); var shellinfo: TSHFileOpStruct; begin with shellinfo do begin Wnd := 0; wFunc := FO_RENAME; pFrom := PChar(DirFrom); pTo := PChar(DirTo); fFlags := FOF_FILESONLY or FOF_ALLOWUNDO or FOF_SILENT or FOF_NOCONFIRMATION; end; SHFileOperation(shellinfo); end; |
Ich hab schon "Suche" benutzt und gegooglt, und bin auf diese CreateDir und ForceDir Geschichte gekommen bei vielen Dateien, aber ich steig da nicht ganz durch.
Danke fürs lesen ;) hoffentlich kommt bald ne kompetente Antwort
Moderiert von
Tino: Titel geändert; Delphi-Tags hinzugefügt
Tino - Di 04.11.03 09:59
Hallo!
Ich kenne die TShellListView Komponente nicht. Aber versuch mal folgendes:
Ersetz die folgende Zeile:
Delphi-Quelltext
1:
| For i := 0 to ShellListview1.Items.Count-1 do |
durch
Delphi-Quelltext
1:
| For i := ShellListview1.Items.Count-1 downto 0 Do |
Gruß
Tino
naleh - Di 04.11.03 23:25
Also das ganze andersrum laufen zu lassen hat wenig sinn, wegen der nummerierung(ausserdem löst sich dadurch nicht das problem). aber ich hab eben mal ReNameFile Probiert. Damit klappt das wunderbar. Naja das kann ja auch keiner ahnen das man mit renamefile auch verzeichnisse umbenennen kann. ;)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure TForm2.Button2Click(Sender: TObject); var i,nummer:integer; templist:TStrings; begin Shelllistview1.AutoRefresh:= false; templist:=Tstringlist.Create; nummer:=StrToInt(edit1.Text); For i := 0 to ShellListview1.Items.Count-1 do begin templist.Add(shelllistview1.Folders[i].PathName); end;
for i:= 0 to templist.Count-1 do begin RenameFile(templist[i],ExtractFileDir(templist[i])+'\'+IntToStr(nummer)); Statusbar1.Panels[0].Text := IntToStr(i+1)+' / '+IntToStr(templist.Count)+'Ordnern.'; Application.ProcessMessages; inc(nummer); end;
templist.Free; shelllistview1.AutoRefresh:= true; shelllistview1.Refresh; end; |
Also Danke für die Hilfe
Moderiert von
Tino: Delphi-Tags hinzugefügt.
Tino - Mi 05.11.03 11:45
| naleh hat folgendes geschrieben: |
| Also das ganze andersrum laufen zu lassen hat wenig sinn, wegen der nummerierung(ausserdem löst sich dadurch nicht das problem). |
Ich dachte hier geht es um das löschen von Dateien/Verzeichnissen. Denn dann hätte die Laufrichtung eine entscheidene Rolle gespielt.
Gruß
Tino
naleh - Mi 05.11.03 18:16
Weshalb? *interesier* ;)
Tino - Do 06.11.03 10:08
Guten Morgen!
Wenn du z. b. vier Ordner hast: Rot, Blau, Gelb und Grün. Der Ordner "Rot" hat den Index 0, der Ordner "Blau" den Index 1, "Gelb" hat den Index 2 und der Ordner "Grün" den Index 3. Wenn du jetzt anfängst von oben an die Ordner zu löschen dann beginnst du mit dem Ordner mit dem Index 0 zu löschen (also Rot). Danach hast du nur noch die Ordner Blau, Gelb und Grün. Jetzt willst du ja den Ordner "Blau" löschen. Du benutzt aber dafür dann den Index 1. Dieser Index verweist aber auf den Ordner "Gelb" weil durch das löschen von Ordner "Rot" sich auch der Index verschoben hat! Deshalb würde es zu einem Fehler kommen. Also sollte man beim löschen immer Rückwärts vorgehen.
Ich hoffe das war verständlich.
Gruß
Tino
naleh - Do 06.11.03 20:26
jop wars
vielen dank
Tino - Fr 07.11.03 09:16
| naleh hat folgendes geschrieben: |
| vielen dank |
Gerne... dafür sind wir ja da :-D
Gruß
Tino
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!