AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Verzeichnisse kopieren mit ShFileOperation erzeugt Fehler
Thema durchsuchen
Ansicht
Themen-Optionen

Verzeichnisse kopieren mit ShFileOperation erzeugt Fehler

Ein Thema von matashen · begonnen am 9. Jul 2008 · letzter Beitrag vom 9. Jul 2008
Antwort Antwort
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#1

Verzeichnisse kopieren mit ShFileOperation erzeugt Fehler

  Alt 9. Jul 2008, 20:14
Hallo zusammen,

ich bin jetzt schon seit 2 Stunden in Hilfen und Foren am lesen und suchen, warum ich nix kopieren kann.

Ich hatte folgende Routine schonmal erfolgreich verwendet um Verzeichnisse zu kopieren

Delphi-Quellcode:
function CopyDir(const fromDir, toDir: widestring): Boolean;
// ^^^ von String nach widestring nach Problemen mit langen Dateinamen ^^^
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc := FO_COPY;
    fFlags := FOF_FILESONLY;
    pFrom := PChar(fromDir + #0);
    pTo := PChar(toDir)
  end;
  Result := (0 = ShFileOperation(fos));
end;
So hab ich diesen Code genommen und in mein neues Projekt kopiert.
leider funzt das gar nicht. Weder eine Datei zu kopieren noch ein ganzes Verzeichnis.
der letzte verzweifelt aufruf war
copydir('D:\Memotest.bmp','XXXMEO.BMP') Als Antwort vom System bekomme icheine Warnmeldung mit der Schrift
Datei kann nicht kopiert werdenie Quelldatei oder vom Datenträger kann nicht kopiert werden

weis da jemand rat woher dieser Fehler kommt ?

Gruß Matthias
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Verzeichnisse kopieren mit ShFileOperation erzeugt Fehle

  Alt 9. Jul 2008, 20:29
Moin Matthias,

hier:
pTo := PChar(toDir) fehlt noch das +#00

Ob WideString oder String hat übrigens nichts mit langen Dateinamen zu tun.
Solange Du die Standardversion der API-Funktion benutzt, ist es sowieso die für Ansi, und nicht für Wide.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
marabu

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

Re: Verzeichnisse kopieren mit ShFileOperation erzeugt Fehle

  Alt 9. Jul 2008, 20:35
Hallo Matthias,

hast du es schon so probiert?

Delphi-Quellcode:
function CopyDir(const fromDir, toDir: string): Boolean;
// für Widestring-Namen ist ShFileOperationW() zu verwenden
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc := FO_COPY;
    fFlags := FOF_FILESONLY;
    pFrom := PChar(fromDir + #0);
    pTo := PChar(toDir);
  end;
  Result := (0 = ShFileOperation(fos));
end;
Aufruf so:
Delphi-Quellcode:
copydir('D:\Memotest.bmp', 'D:\XXXMEO.BMP');
// MS: Use fully-qualified paths.
// Using relative paths is not prohibited, but can have unpredictable results.
@Christian:
WinSDK :: SHFILEOPSTRUCT
  • For Copy and Move operations, the buffer can contain multiple destination file names if the fFlags member specifies FOF_MULTIDESTFILES.
  • Pack multiple names into the pTo string in the same way as for pFrom.

Ohne das Flag wird der Leerstring wohl nicht benötigt.

Freundliche Grüße
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#4

Re: Verzeichnisse kopieren mit ShFileOperation erzeugt Fehle

  Alt 9. Jul 2008, 20:41
@Christian:
das ergänzen des Codes brachte leider das gleiche ergebnis => funzt nicht

Das mit widestring hat tatsächlich mein Problem gelöst, ist noch aus meinem älteren Projekt warum ich nicht genau darauf eingehen möchte.

Aber wie gesagt es funzt so nicht.

ob ich das #00 anhänge scheint auch egal zu sein...


@marabu: Du hast nur bei Quelle nen Leerstring angehängt, das reicht?

Kann sonst keinen Unterschied entdecken ???

Gruß Matthias
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Verzeichnisse kopieren mit ShFileOperation erzeugt Fehle

  Alt 9. Jul 2008, 20:43
Moin Marabu,

ein Stück weiter oben steht dann noch:

Zitat:
Like pFrom, the pTo member is also a double-null terminated string and is handled in much the same way.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#6

Re: Verzeichnisse kopieren mit ShFileOperation erzeugt Fehle

  Alt 9. Jul 2008, 20:46
Man sollte einfach mit klarem Kopf so nen Code verbrechen - wie konnt ich das übersehen - hab die Zeilen heute xmal gelesen


Danke an euch...es funzt jetzt

Gruß Matthias
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
marabu

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

Re: Verzeichnisse kopieren mit ShFileOperation erzeugt Fehle

  Alt 9. Jul 2008, 21:02
Moin Christian,

Zitat von Christian Seehase:
... ein Stück weiter oben steht dann noch ...
du interpretierst das falsch - pTo wird nur als String-Array betrachtet, wenn das besagte Flag gesetzt ist.

Ein, zwei zusätzliche Nulls am Ende schaden allerdings auch nicht.

Freundliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:09 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