Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Direkt auf Portable Media Device kopieren (https://www.delphipraxis.net/160318-direkt-auf-portable-media-device-kopieren.html)

FBrust 7. Mai 2011 12:47

Direkt auf Portable Media Device kopieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich hab günstig einen MP3-Player von Creative (Zen Vision:M) bekommen.

Dieser taucht im Arbeitsplatz unter Windows XP einmal als "Portable Media Device" und als "Systemordner" auf.

Ich würde gerne per Delphi-Programm MP3s direkt dort drauf kopieren (der Ordner ist bekannt, s. Screenshot), aber wenn ich mit einem JvDirectoryEdit den entsprechenden Ordner öffne, erhalte ich z. B. beim Portable Media Device im Edit-Feld den Text

::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\Creative Zen Vision:M\Media\Music

und das Kopieren mit folgender Routine scheitert ("Zielpfad fehlt oder ist ungültig"):

Delphi-Quellcode:
function Copyfiles(slSource, slTarget: TStringList): integer;
var op: TSHFileOperation;
begin
    op := TSHFileOperation.Create(Self.Handle);
    try
      op.Operation := fotCopy;
      op.Flags := [fofFilesOnly, fofNoConfirmation];
      op.SourceList.Assign(slSource);
      op.TargetList.Assign(slTarget);
      op.ExecuteOperation;
    finally
      Result := op.FileOpResult;
      op.Free;
    end;
end;
Drag&Drop per Windows-Explorer funktioniert im übrigen.

Meine Frage ist: Wie spricht man solche Geräte bzw. Ordner mit Delphi an, um Dateien zu kopieren bzw. zu löschen?


Gruß
Frank

FBrust 8. Mai 2011 15:23

AW: Direkt auf Portable Media Device kopieren
 
Hmm, ok,

vielleicht gehts anders:

Per Drag&Drop kann ich Ordner mit MP3s in dem in dem Screenshot angezeigten Ordner ablegen, die dann auch auf dem Gerät auftauchen.

Gibt es eine Möglichkeit, D&D zu simulieren? (keine Ahnung, wie das aussehen soll, deswegen frag ich ja hier :))

Gruß
Frank

alfold 8. Mai 2011 15:36

AW: Direkt auf Portable Media Device kopieren
 
So viel ich weiss, kann man mit der Api nur Datei kopieren, nicht ne ganze Liste!
Wie sollte sie auch.
Übrigens musss man auch bei der Übergabe von Ziel und Quelle noch #0 anhängen

Delphi-Quellcode:
function CopyDir(const fromDir, toDir: string): Boolean;
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 + #0);
  end;
  Result := (0 = ShFileOperation(fos));
end;
Gruss alfold

rollstuhlfahrer 8. Mai 2011 17:22

AW: Direkt auf Portable Media Device kopieren
 
Mal die Frage: Was steht denn in Result drin und was meint MSDN-Library durchsuchenGetLastError() ? - So sollte sich der Fehler ziemlich eingrenzen lassen.

Bernhard

FBrust 9. Mai 2011 21:16

AW: Direkt auf Portable Media Device kopieren
 
Hallo,

so ich hab noch etwas rumgebastelt und folgendes herausgefunden:

Die obige Fehlermeldung kam von der DirectoryExists-Prüfung. Wenn diese ausschalte, läuft das Programm weiter, bis zum CopyFiles (das beim Execute auch feststellt, dass der Ordner nicht existiert und nachfragt, ob der Ordner erstellt werden soll) und bricht dann mit der Meldung:

Zitat:

::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\Creative Zen Vision:M\Media\Music\Testalbum bezieht sich auf einen Pfad der nicht verfügbar ist. Dieser kann auf einer Festplatte dieses Computers oder im Netzwerk sein. Stellen Sie sicher, dass der Datenträger korrekt eingelegt ist, bzw. dass eine Verbindung mit dem Internet oder dem eigenen Netzwerk besteht und wiederholen Sie den Vorgang. Es kann sein, dass die Informationen in einen anderen Pfad verschoben wurden, wenn der Pfad weiterhin nicht ermittel werden kann.
ab, der Rückgabewert von Copyfiles ist dann 1223, der von GetLastError ist 0.

Tja...der Pfad existiert aber bis einschließlich "Music", ich kann ihn ja im Verzeichnisdialog vom DirectoryEdit auswählen. Ausserdem kann ich, wie gesagt, Dateien und Verzeichnisse per Drag&Drop rüberziehen.

Wenn ich versuche, das Verzeichnis mit ForceDirectories anzulegen, schlägt das fehl (false) und GetLastError() liefert eine 3 zurück.

Kann es sein, dass die Pfadbezeichnung ein Anlegen von Verzeichnissen per Programmierung verhindert bzw. dass das Kopieren von Dateien nur mit "echten" Laufwerken, also z. B. "D:\bla...." bzw. mit UNC-Pfaden funktioniert?

Edit: Habe gerade festgestellt, dass in der Explorer-Ansicht für besagtes "Music"-Verzeichnis sich keine neuen Verzeichnisse anlegen lassen, nur wenn man Ordner per Drag&Drop rüberzieht, werden diese auch angelegt. Löschen ist aber möglich *kopfkratz*

Was nun, hat vielleicht noch jemand einen Tip?


Gruß
Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:08 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