Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Pfadinhalte eine Ebene aufwärts kopieren (https://www.delphipraxis.net/197911-pfadinhalte-eine-ebene-aufwaerts-kopieren.html)

old7 18. Sep 2018 19:09

AW: Pfadinhalte eine Ebene aufwärts kopieren
 
Für den übergeordneten Ordner sollte doch ein Rename (statt Kopieren+Löschen) reichen, für den verbleibenden Rest dann Rolfs Prozeduren, oder?

KodeZwerg 18. Sep 2018 19:18

AW: Pfadinhalte eine Ebene aufwärts kopieren
 
Delphi-Quellcode:
function MoveDir(SrcDir, DstDir: string): Boolean;
var
  FOS: TSHFileOpStruct;
begin
  ZeroMemory(@FOS, SizeOf(FOS));
  with FOS do
  begin
    wFunc := FO_MOVE; // FO_COPY;
    fFlags := FOF_ALLOWUNDO or FOF_SIMPLEPROGRESS;
    pFrom := PChar(IncludeTrailingPathDelimiter(SrcDir) + '*.*'#0);
    pTo   := PChar(DstDir + #0);
  end;
  Result := (SHFileOperation(FOS) = 0);
end;
Versuche das mal.

old7 18. Sep 2018 19:28

AW: Pfadinhalte eine Ebene aufwärts kopieren
 
Danke, aber ich hatte das Problem noch nicht. War nur eine theoretische Überlegung von mir, da Umbenennen bei großen Dateien platten-/SSDschonender ist (und vermutlich auch schneller). :wink:

KodeZwerg 18. Sep 2018 19:43

AW: Pfadinhalte eine Ebene aufwärts kopieren
 
Zitat:

Zitat von old7 (Beitrag 1413529)
Danke, aber ich hatte das Problem noch nicht. War nur eine theoretische Überlegung von mir, da Umbenennen bei großen Dateien platten-/SSDschonender ist (und vermutlich auch schneller). :wink:

Hallo old7, Verzeihung ein Missverständnis, meine Antwort galt dem TE und nicht Deiner Frage.
Also die Variante die ich zeigte ist dieselbe die Windows einsetzt.
Um auf Dich einzugehen, Ja ein "Move/Bewegen" ist schonender und schneller wenns das gleiche Laufwerk/Partition betrifft, ansonsten ist es egal.

Rolf Frei 19. Sep 2018 12:08

AW: Pfadinhalte eine Ebene aufwärts kopieren
 
Zitat:

Zitat von zeras (Beitrag 1413513)
Danke an Allen.

Ich wollte in neuen Projekten auch einmal die neuen Klassen verwenden (TFILE, TPAH, etc.). Aber anscheinend läßt sich mein Problem nur mittels der Funktionen von Rolf lösen.
Danke Rolf.
Ich habe verschiedene Ansätze von euch probiert, aber immer kommt die Meldung, dass ein Pfad schon vorhanden sei. Ist er ja auch. Aber warum sollte man nicht alle Verzeichnisse und Dateien eine Ebene aufwärts verschieben können. Möglicherweise noch ein Denkfehler von Emba oder MS.

Man könnte meine Routinen mit gewissen Einschränkungen, die mit IOUtils nicht umsetzbar sind, auf die System.IOUtils Klassen anpassen, wenn man Multiplattformkonform sein möchte. Für mich ist das aber kein Thema und deshalb nutze ich diese Routinen schon seit Jahren so. Ausserdem läuft der Code auf allen Delphiversion und bietet noch viel mehr Möglichkeiten, als das etwas zu einfach umgesetzte TDriectory.Move.

@old7
Er möchte den übergeordneten Order nicht "löschen/umbennen" sondern nur den Inhalt des Untervezeichnisses in den bestehenden Überorder verschieben. Der Inhalt im übergeordneten Order soll dabei nicht verändert werden, also alles was schon besteht soll auch nach dem Move noch vorhanden sein. Zumindest habe ich das so verstanden.

Luckie 19. Sep 2018 12:24

AW: Pfadinhalte eine Ebene aufwärts kopieren
 
Ich dachte, es ginge ihm erst mal darum den übergeordneten Ordner raus zu bekommen. Wie er dann seine Dateien dahin bekommt, wäre dann ein anderes Problem. Man könnte dann ja auch mit einem Zwischenschritt über einen temporären Ordner gehen. Liegt der in der selben Partition wird ja eh nur der Eintrag im FAT geändert und sie werden nicht physisch verschoben. Was dann auch recht schnell sein sollte.

old7 19. Sep 2018 16:12

AW: Pfadinhalte eine Ebene aufwärts kopieren
 
@Rolf
Um die Datei
C:\ueber\unter\riesig.mp4 nach
C:\ueber\riesig.mp4
zu verschieben, sollte ein Umbenennen der Datei riesig.mp4 reichen, falls sie noch nicht in C:\ueber vorhanden ist, das meinte ich.

Das hat nichts mit dem "löschen/umbenennen" des übergeordneten Ordners zu tun, da habe ich den TE schon richtig verstanden, siehe Luckie, der übergeordnete Ordner liegt ja immer in der selben Partition, also wird nur der Eintrag in der FAT umbenannt, falls möglich. In diesem Fall kann man sich das Kopieren+Löschen von riesig.mp4 sparen.

Da hast du mein "umbenennen" wohl falsch verstanden ;-)

Delphi.Narium 19. Sep 2018 17:57

AW: Pfadinhalte eine Ebene aufwärts kopieren
 
ungefähr sowas?
Delphi-Quellcode:
sAlt     := 'c:\temp\alt\irgendeine.mp3';
sWegdamit := '\alt\';
sNeu     := AnsiReplaceText(sAlt,sWegDamit,'\');
if not SysUtils.RenameFile(sAlt,sNeu) then ShowMessage(Format('Fehler beim Umbenennen: %s',[sAlt,sNeu]));
In kurz (ohne Fehlerbehandlung ...):
Delphi-Quellcode:
SysUtils.RenameFile(sDateiname,AnsiReplaceText(sDateiname,'\alt\','\'));

old7 19. Sep 2018 18:21

AW: Pfadinhalte eine Ebene aufwärts kopieren
 
Jupp, und auf die Idee mit AnsiReplaceText für den Ü-Ordner wäre ich nicht gekommen (hätte die Backslashes von hinten geparst) :thumb:

zeras 19. Sep 2018 18:22

AW: Pfadinhalte eine Ebene aufwärts kopieren
 
Danke euch allen.
Ich hätte nie gedacht, dass es so viele verschiedene Ansätze gibt.
Mein eigentliches Problem ist, dass ich delphizip verwende und aus größeren ZIPfiles nur einige Dateien bzw. Verzeichnisse benötige. Diese sind so eingepackt, dass die Dateien, die ich entpacken will, in einem Unterverzeichnis stehen, beim Auspacken dieser Unterpfad aber stört, so ungefähr
im Zipfile
unnötiger Pfad\datei(en)
unnötiger Pfad\nötiger Pfad\datei(en)
unnötiger Pfad\nötiger Pfad\nötiger Pfad\datei(en)

ausgepackt soll dann so sein
datei(en)
nötiger Pfad\datei(en)
nötiger Pfad\nötiger Pfad\datei(en)

Ich habe bisher keine Möglichkeit im Delphizip gefunden, diesen Pfad schon beim Auspacken zu eliminieren.
Von Delphizip möchte ich aber auch nicht wechseln, da ich das in verschiedenen Projekten benutze.
Wenn man ein Basisverzeichnis für das Zipfile hätte, vom dem dann alles entzipt werden könnte, wäre das super.

Ich hoffe, dass erklärt noch einmal allen, was ich genau machen will.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:37 Uhr.
Seite 3 von 4     123 4      

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