AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehlerhaftes kopieren

Ein Thema von delphinia · begonnen am 12. Jul 2008 · letzter Beitrag vom 12. Jul 2008
Antwort Antwort
Seite 1 von 2  1 2      
delphinia

Registriert seit: 16. Feb 2006
444 Beiträge
 
Delphi 11 Alexandria
 
#1

Fehlerhaftes kopieren

  Alt 12. Jul 2008, 04:28
Erstmal meine Auflistungsfunktion von Dateien/Ordnern: (funktioniert wunderbar)

Delphi-Quellcode:
procedure GetFilesInDirectory(Directory: string; const Mask: string; List: TStrings; WithSubDirs, ClearList: Boolean; var ATotalSize: Int64);

  procedure ScanDir(const Directory: string);
  var SR: TSearchRec;
  begin
    if FindFirst(Directory + Mask, faAnyFile and not faDirectory, SR) = 0 then
    try
      repeat
        List.Add(Directory + SR.Name)
      until
        FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
    if WithSubDirs then
    begin
      if FindFirst(Directory + '*.*', faAnyFile, SR) = 0 then
      try
        repeat
          if ((SR.attr and faDirectory) = faDirectory) and (SR.Name <> '.') and (SR.Name <> '..') then
            ScanDir(Directory + SR.Name + '\');
          Inc(ATotalSize, SR.Size);
        until
          FindNext(SR) <> 0;
      finally
        FindClose(SR);
      end;
    end;
  end;

begin
  List.BeginUpdate;
  try
    if ClearList then
      List.Clear;

    if Directory = 'then
      Exit;

    if Directory[Length(Directory)] <> '\then
      Directory := Directory + '\';

    ScanDir(Directory);
  finally
    List.EndUpdate;
  end;
end;
Das Problem ist nun nur.
Kopiere ich nun die Files aus der FileList

CopyFile(PChar(FileList[i]), PChar('F:\test\' + ExtractFileName(FileList[i])), true); kopiert auch alle Dateien NUR leider alle in ein Verzeichnis statt so wie diese asu ihren eigenen Ordnern kommen diese auch da wieder hinzupacken... WO ist da der Fehler was fehlt mir?
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Fehlerhaftes kopieren

  Alt 12. Jul 2008, 04:34
Na, ist doch klar:
CopyFile(PChar(FileList[i]), PChar('F:\test\' + ExtractFileName(FileList[i])), true); Du rufst ja auch ExtractFileName auf, damit wird der Dateipfad auf den Namen der Datei reduziert.
  Mit Zitat antworten Zitat
delphinia

Registriert seit: 16. Feb 2006
444 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Fehlerhaftes kopieren

  Alt 12. Jul 2008, 04:50
hm ok das verstehe ich aber nun habe ich wenn ich mir den Pfad per ShowMessage ausgeben lasse

Sowas stehen

F:\test\D:\test\

Habe dann da ja in der FileList der ganze Pfad + eventueller File steht (auch das Laufwerksangaben) die stören und verhindern den kopiervorgang bzw das anlegen von Verzeichnissen
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Fehlerhaftes kopieren

  Alt 12. Jul 2008, 05:03
Du müsstest die Pfadangaben aufsplitten (siehe Explode-Funktion aus der Codelib) und dann nur die Verzeichnisebenen wieder zusammenfügen die hinter dem Hauptverzeichnis liegen.

Pseudocode:
Code:
function RelativerPfad(Hauptpfad, Unterverzeichnis: string): string;
{
  hauptpfad_verzeichnistiefe = array_count(split(hauptpfad,'\'));
  unterverzeichnis_parts = split(hauptpfad,'\');
  for i := hauptpfad_verzeichnistiefe to array_count(unterverzeichnis_parts) do
    result = result+unterverzeichnis_parts[i]+'\';
}
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Fehlerhaftes kopieren

  Alt 12. Jul 2008, 08:46
Moin Doreen,

Zitat von delphinia:
... Das Problem ist nun nur. Kopiere ich nun die Files aus der FileList

CopyFile(PChar(FileList[i]), PChar('F:\test\' + ExtractFileName(FileList[i])), true); kopiert auch alle Dateien NUR leider alle in ein Verzeichnis statt so wie diese asu ihren eigenen Ordnern kommen diese auch da wieder hinzupacken... WO ist da der Fehler was fehlt mir? ...
das könnte helfen:

Delphi-Quellcode:
function RelativePath(const fn: TFileName): TFileName;
begin
  Result := ExtractRelativePath(ExtractFileDrive(fn), ExtractFilePath(fn));
end;

begin
  CopyFile(PChar(FileList[i]), PChar('F:\test\' + RelativePath(FileList[i])), True);
end;
Nachtrag: Es reicht beim Kopieren eigentlich der minimale relative Pfad. Dazu kannst du einfach ExtractRelativPath(Directory, FileList[i]) aufrufen, wobei Directory das gleiche Verzeichnis sein sollte, welches du an deine Prozedur GetFilesInDirectory() übergeben hast. Idealerweise erweiterst du deine Prozedur um einen Parameter, der die Rückgabe von absoluten oder relativen Dateinamen steuert.

Freundliche Grüße
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Fehlerhaftes kopieren

  Alt 12. Jul 2008, 10:45
Zitat:
ExtractRelativePath(ExtractFileDrive(fn), ExtractFilePath(fn))
Wtf? Sowas gibts schon?
Delphi erstaunt mich mal wieder
  Mit Zitat antworten Zitat
delphinia

Registriert seit: 16. Feb 2006
444 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Fehlerhaftes kopieren

  Alt 12. Jul 2008, 11:44
Ok danke Euch den Fehler von mir bzw was ich machen muss habe ich verstanden.
Aber eines habe ich NOCH

Und zwar beispiel der Pfad

C:\Windows\System32\mein_ordner

Diesen möchte ich kopieren mitsamt allen Unterordnern / Dateien
ABER NUR diesen

bei meinem / Euren Beispielen oben wäre es ja dann so beim Target Pfad

D:\COPY\Windows\System32\mein_ordner

Ich würde es gerne so haben das ALLES ausser mein_ordner wegfällt
So D:\COPY\mein_ordner

Würde es da reichen wenn ich sowas wie einfach String im Target String nach "C:\Windows\System32\" suche und es lösche?
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Fehlerhaftes kopieren

  Alt 12. Jul 2008, 12:02
Das kannst du so machen - oder du arbeitest mit einer Funktion, wie ExtractParentDir().
  Mit Zitat antworten Zitat
delphinia

Registriert seit: 16. Feb 2006
444 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Fehlerhaftes kopieren

  Alt 12. Jul 2008, 12:08
Also wenn ich es so machen tät wäre das nichts schlimmes oder was schlechtes?!

Deine Funktion hat den Nachteil, dass unterPfade auch nur als deren Ordner nagzeigt werden

Also beispiel

C:\Windows\Mein Order
C:\Windows\Mein Order\Test
daraus wird dann

Mein Ordner
Test
Statt

Mein Ordner
Mein Ordner\test
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Fehlerhaftes kopieren

  Alt 12. Jul 2008, 12:23
Entschuldige, ich habe dir die falsche Funktion verlinkt. Eigentlich geht es ja darum, dass du den ParentPath vom Directory benötigst, mit dem du deine Prozedur GetFilesInDirectory() aufgerufen hast:

Delphi-Quellcode:
begin
  dir := 'C:\Windows\System32\delphinia';
  GetFilesInDirectory(dir, ...);
  relPath := ExtractRelativePath(ExtractFilePath(dir), FileList[i]);
end;
Ob du es mit einer Funktion oder zu Fuß umsetzt, ist für das Ergebnis egal. Wenn du den Präfix mit Delete() wegschneidest, dann ist das für dich sicher akzeptabel. Die Funktion hat erst dann einen Wert für dich, wenn du deine Programmierung auf Wiederverwendung ausrichtest.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:46 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