![]() |
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:
Aber irgenwie wird der Ordner nicht dahin Kopiert wo ich ihn haben will
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)'); Sagen wir mal ich Kopiere
Delphi-Quellcode:
nach
Dokument_Mobil\Privatedokumente
Delphi-Quellcode:
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.
Form1.ServerPfad + Dokumente\Privatedokumente
Das hab ich so in der Funktion hinterlegt. Gruß Sascha |
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. |
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:
aber es so der Privatedokumente überschrieben werden samt inhalt
Form1.ServerPfad + Dokumente\Privatedokumente\Privatedokumente <-------
Zitat:
|
Re: Ordner Kopieren funzt net richtig
Zitat:
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\" |
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 |
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. |
Re: Ordner Kopieren funzt net richtig
Ich habe mir das jetzt nicht im Detail angeschaut, aber 2 Dinge sind mir direkt aufgefallen:
Delphi-Quellcode:
Wäre DirectoryExists() hier nicht angebrachter?
if not FileExists (sNachPfadangabe + 'Privat_Mobil\') then
begin ForceDirectories(sNachPfadangabe + 'Privat_Mobil\');
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 |
Re: Ordner Kopieren funzt net richtig
Zitat:
Von der Logig her hast du recht wieso, weshalb, warum keine Ahnung. Zitat:
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???? |
Re: Ordner Kopieren funzt net richtig
|
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:
Nach dem Kopieren
C:\MeinVerzeichnis\
Delphi-Quellcode:
Wenn ich diesen Ordner jetzt nochmal Kopiere sieht es so aus
C:\MeinVerzeichnis\OrdnerA
Delphi-Quellcode:
aber es soll ja so aussehen
C:\MeinVerzeichnis\OrdnerA\OrdnerA
Delphi-Quellcode:
C:\MeinVerzeichnis\OrdnerA
|
Re: Ordner Kopieren funzt net richtig
Dürfte eigentlich nicht sein lass dir mal deine Pfade mit Showmessage ausgeben zum überprüfen dort muss doch irgendetwas schiefgehen.
|
Re: Ordner Kopieren funzt net richtig
ja das glaube ich auch nach dem ich das jetzt ausgeklammert habe geht das Expotieren
Delphi-Quellcode:
Jetz muss ich nur mal nach dem Ipotieren gucken
if CopyDir (Form1.ServerPfad + 'Privat\' + ExtractFileName(ShellTreeView2.Path),sNachPfadangabe + 'Privat_Mobil\'{+ ExtractFileName(ShellTreeView2.Path)})
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz