Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Ordner Kopieren funzt net richtig (https://www.delphipraxis.net/113308-ordner-kopieren-funzt-net-richtig.html)

SaFu 5. Mai 2008 23:04


Ordner Kopieren funzt net richtig
 
Schönen abend.

Was mach ich falsch ich versuche einen Ordner in einen Anderen Ordner zu Kopieren aber das funzt net so richtig

Hiermit versuche ich von meinem USB Stick einen bestimmten Ordner in ein anderes Verzeichnis zu Kopieren.
Delphi-Quellcode:
function CopyFiles (const fromDir, toDir: string): Boolean;
var fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc := FO_COPY;
    wnd   := Application.Handle; //    fFlags := FOF_FILESONLY;
    fFlags := 0;
    fFlags := FOF_NOCONFIRMATION; //  keine bestätigung zum überschreiben
    pFrom := PChar(fromDir + #0);
    pTo   := PChar(toDir + #0)
  end;
  Result := (0 = ShFileOperation(fos));
end;

CopyFiles (sVonPfadangabe + 'Dokument_Mobil\' + ExtractFileName(ShellTreeView4.Path),Form1.ServerPfad + Dokumente\ +ExtractFileName(ShellTreeView4.Path)');
Aber irgenwie wird der Ordner nicht dahin Kopiert wo ich ihn haben will

Sagen wir mal ich Kopiere
Delphi-Quellcode:
Dokument_Mobil\Privatedokumente
nach

Delphi-Quellcode:
Form1.ServerPfad + Dokumente\Privatedokumente
Wenn der Ordner Privatedokumente nicht vorhanden ist wird er Kopiert, ist er vorhanden wir der Ordner Privatedokumente in Privatedokumente Kopiert, der soll aber überschrieben werden.

Das hab ich so in der Funktion hinterlegt.

Gruß Sascha

himitsu 5. Mai 2008 23:19

Re: Ordner Kopieren funzt net richtig
 
heißt also der Ordner wird korrekt kopiert, nur das einige "alte" Dateien im Zielordner, welche nicht im Quellordner existieren, nicht gelöscht werden?


und benutze bei dieser Funktion möglichst keine relativen Pfade.

SaFu 6. Mai 2008 08:04

Re: Ordner Kopieren funzt net richtig
 
Ja wenn er nicht in dem Verzeichnis Existiert wird er in das Verzeichnis Kopiert. Existiert er bereits in dem Verzeichnis wird er in das Verzeichnis gelegt mit dem selben Namen

Allso sieht es so aus
Delphi-Quellcode:
Form1.ServerPfad + Dokumente\Privatedokumente\Privatedokumente <-------
aber es so der Privatedokumente überschrieben werden samt inhalt

Zitat:

Zitat von himitsu
und benutze bei dieser Funktion möglichst keine relativen Pfade.

Meinst du damit das ich das nicht so zusamen setzen soll??? :oops:

himitsu 6. Mai 2008 08:31

Re: Ordner Kopieren funzt net richtig
 
Zitat:

Zitat von fuknersascha
Meinst du damit das ich das nicht so zusamen setzen soll??? :oops:

zusammen setzen kannst du, aber besser baust du auch noch den vollen Pfad zusammen

was steht denn in sVonPfadangabe und Form1.ServerPfad?

nicht nur "Dokument_Mobil\Privatedokumente" (relativ), sondern z.B. "U:\Dokument_Mobil\Privatedokumente" ... ShFileOperation hat da manchmal Probleme damit :?


eventuell geht es mit Maske besser?
"U:\Dokument_Mobil\Privatedokumente\*.*" > "Form1.ServerPfad + Dokumente\Privatedokumente"
oder? :gruebel:
"U:\Dokument_Mobil\Privatedokumente\*.*" > "Form1.ServerPfad + Dokumente\Privatedokumente\"

SaFu 6. Mai 2008 08:34

Re: Ordner Kopieren funzt net richtig
 
In "sVonPfadangabe" steht der Pfad drin der ich mir aus der ShellTreeview hole.
Also das Laufwerk von dem der Ordner zu holen ist.

z.b.
F:\Dokument_Mobil\Privatedokumente Ergo sVonPfadangabe + Dokument_Mobil\Privatedokumente

SaFu 6. Mai 2008 14:48

Re: Ordner Kopieren funzt net richtig
 
Vielleicht kann mir doch nochmal jemand einen Tipp geben ich versuche Ordner zu Exportiern hat jemand ne anhnung wo da ein Fehler sein könnte.

Komplette Unit

Delphi-Quellcode:
unit Unit8;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,ShellApi,DateUtils, ComCtrls, ShellCtrls, ExtCtrls, StdCtrls, Menus;

type
  TForm8 = class(TForm)
    StatusBar1: TStatusBar;
    Panel1: TPanel;
    Button3: TButton;
    PopupMenu1: TPopupMenu;
    Privatexpotieren: TMenuItem;
    Button1: TButton;
    GroupBox1: TGroupBox;
    Panel3: TPanel;
    ShellTreeView1: TShellTreeView;
    GroupBox2: TGroupBox;
    Panel2: TPanel;
    ShellTreeView2: TShellTreeView;
    procedure Button3Click(Sender: TObject);
    procedure ShellTreeView1Expanding(Sender: TObject; Node: TTreeNode;
      var AllowExpansion: Boolean);
    procedure FormShow(Sender: TObject);
    procedure ShellTreeView1Click(Sender: TObject);
    procedure ShellTreeView2Expanding(Sender: TObject; Node: TTreeNode;
      var AllowExpansion: Boolean);
    procedure PrivatexpotierenClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure ShellTreeView2MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);

   private
    sVonPfadangabe,sNachPfadangabe,sPfadordner : string; { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

 type
   TShellTv= class(TShellTreeView);
var
  Form8: TForm8;

implementation

uses Unit1, Unit7;

{$R *.dfm}
//===================Dateien Kopieren===========================================
function CopyFiles (const fromDir, toDir: string): Boolean;
var fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc := FO_COPY;
    wnd   := Application.Handle;
    fFlags := 0;
    fFlags := FOF_NOCONFIRMATION; //  keine bestätigung zum überschreiben
    pFrom := PChar(fromDir + #0);
    pTo   := PChar(toDir + #0)
  end;
  Result := (0 = ShFileOperation(fos));
end;

//==========================schließen==========================================
procedure TForm8.Button3Click(Sender: TObject);
begin
 ShellTreeView1.Refresh(ShellTreeView1.Items[0]); // Medium auf das Eportiert werden soll
 ShellTreeView2.Refresh(ShellTreeView2.Items[0]); // Ordner der Expotiert werden soll
 close;
end;

procedure TForm8.FormShow(Sender: TObject);
begin
 Form8.Top:= Form7.Top + 200;
 Form8.Left:= Form7.left + 200;
 ShellTreeView1.Refresh(ShellTreeView1.Items[0]);
 ShellTreeView2.Refresh(ShellTreeView2.Items[0]);
 TShellTv(Self.ShellTreeView1).ReadOnly:= true;
 TShellTv(Self.ShellTreeView2).ReadOnly:= true;

 sVonPfadangabe:= (Form1.ServerPfad + 'Privat\');
 StatusBar1.Panels[1].Text:= 'Von: '+ sVonPfadangabe;

 sPfadordner:= (Form1.ServerPfad + 'Privat\');// Pfad setzen zu den Privat
 ShellTreeview2.Root:= sPfadordner;
end;

procedure TForm8.ShellTreeView1Click(Sender: TObject);
begin
 sNachPfadangabe:= ShellTreeView1.Path;
 StatusBar1.Panels[0].Text:= 'Nach: ' + sNachPfadangabe;

 ShellTreeView1.Refresh(ShellTreeView1.Items[0]);

end;

//====================nur bis "USB" zulassen======================================
procedure TForm8.ShellTreeView1Expanding(Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean);
begin
 if Node <> ShellTreeView1.Items.Item[0] then
    AllowExpansion:= False;
end;

//==================nur bis \Privat (Server)==============================
procedure TForm8.ShellTreeView2Expanding(Sender: TObject; Node: TTreeNode;
  var AllowExpansion: Boolean);
begin
 if Node <> ShellTreeView2.Items.Item[0] then
    AllowExpansion:= False;
end;

//=============================mit rechts ordner öffnen============================
procedure TForm8.ShellTreeView2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var node: TTreeNode;
begin
  if Button = mbRight then
  begin
   node := ShellTreeView2.GetNodeAt(X, Y);
    if Assigned(node) then
     begin
      node.Selected := True;
     end;
  end;
end;

procedure TForm8.PrivatexpotierenClick(Sender: TObject);
begin
try
   if not FileExists (sNachPfadangabe + 'Privat_Mobil\') then
    begin
     ForceDirectories(sNachPfadangabe + 'Privat_Mobil\');
     if CopyFiles (Form1.ServerPfad + 'Privat\' + ExtractFileName(ShellTreeView2.Path),sNachPfadangabe + 'Privat_Mobil\'+ ExtractFileName(ShellTreeView2.Path))then
      Form1.MessageDlgPos2('Ordner ' +ExtractFileName(ShellTreeView2.Path) + ' Expotiert', mtInformation,[mbOk], self);
    end;
  except
   Form1.MessageDlgPos2('Fehler, bitte überprüfen Sie Ihre Eingaben', mtWarning,[mbOk], self);
  end;
end;
end.

DeddyH 6. Mai 2008 16:17

Re: Ordner Kopieren funzt net richtig
 
Ich habe mir das jetzt nicht im Detail angeschaut, aber 2 Dinge sind mir direkt aufgefallen:
Delphi-Quellcode:
if not FileExists (sNachPfadangabe + 'Privat_Mobil\') then
    begin
     ForceDirectories(sNachPfadangabe + 'Privat_Mobil\');
Wäre DirectoryExists() hier nicht angebrachter?
Delphi-Quellcode:
  with fos do
  begin
    wFunc := FO_COPY;
    wnd   := Application.Handle;
    fFlags := 0; //wozu diese Zeile?
    fFlags := FOF_NOCONFIRMATION; //  keine bestätigung zum überschreiben

SaFu 6. Mai 2008 19:12

Re: Ordner Kopieren funzt net richtig
 
Zitat:

Zitat von DeddyH
Ich habe mir das jetzt nicht im Detail angeschaut, aber 2 Dinge sind mir direkt aufgefallen:
Delphi-Quellcode:
if not FileExists (sNachPfadangabe + 'Privat_Mobil\') then
    begin
     ForceDirectories(sNachPfadangabe + 'Privat_Mobil\');
Wäre DirectoryExists() hier nicht angebrachter?

Wenn ich das mit "DirectoryExists" schreibe, dann geht garnichts mit Kopieren deswegen "File"
Von der Logig her hast du recht wieso, weshalb, warum keine Ahnung.


Zitat:

Zitat von DeddyH
Delphi-Quellcode:
  with fos do
  begin
    wFunc := FO_COPY;
    wnd   := Application.Handle;
    fFlags := 0; //wozu diese Zeile?
    fFlags := FOF_NOCONFIRMATION; //  keine bestätigung zum überschreiben

Wenn ich ganz erlich bin habe ich das hier geklaut und weis net warum ich das reingeschrieben habe dann ist es wohl oft genug hier falsch gemacht worden :oops:

habe gedacht zu Terminieren aber das kommt ja ganz unten in der Function.

Also das Klappt immer noch net hat keiner ne ahnung wie ich das lösen könnte????

Blackheart 6. Mai 2008 19:36

Re: Ordner Kopieren funzt net richtig
 
Schau mal dort

SaFu 6. Mai 2008 19:44

Re: Ordner Kopieren funzt net richtig
 
Genau das gleiche Problem auch damit wenn ich den Ordner in einen Leeren ordner Kopiere geht das

z.b zu Kopierender Ordner "OrdnerA"

Delphi-Quellcode:
C:\MeinVerzeichnis\
Nach dem Kopieren

Delphi-Quellcode:
C:\MeinVerzeichnis\OrdnerA
Wenn ich diesen Ordner jetzt nochmal Kopiere sieht es so aus

Delphi-Quellcode:
C:\MeinVerzeichnis\OrdnerA\OrdnerA
aber es soll ja so aussehen

Delphi-Quellcode:
C:\MeinVerzeichnis\OrdnerA


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:09 Uhr.
Seite 1 von 2  1 2      

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