2016-04-13 13 views
1

Ich verwende FreePascal/Lazarus, und ich versuche, die richtigen ShlObj/ShellApi Aufrufe zu finden, um alle Dateien aus dem DCIM-Ordner eines Geräts (d. H. Einer Kamera) in einen anderen Ordner im Dateisystem zu kopieren. HierShell-API zum Kopieren aller Dateien in einem Ordner?

ist der Code wählen Sie das Gerät wählen:

r:= ShlObj.SHBrowseForFolder(x); 

aber aus, da alles, was ich habe, ist r, die eine LPITEMIDLIST Variable.

Kennt jemand den richtigen Code zum Kopieren aller Dateien im DCIM-Ordner des Geräts 'r' in einen Zielordner (d. H. StrDest)?

Hinweis: Ich muss die Verwendung ShellAPI/ShlObj Schnittstelle das Kopieren

Antwort

2

Ich gehe davon aus, dass die PIDL gibt ein Element zu tun, die einen Teil des Dateisystems ist, aber ich glaube, das ist, was Sie beabsichtigen, da Sie gehen sagen "alle Dateien kopieren". Rufen Sie in diesem Fall SHGetPathFromIDList auf, um den Dateisystempfad von der PIDL abzurufen, und rufen Sie dann SHFileOperation auf, um die Dateien zu kopieren.

Wenn Sie das Kopieren auf der Shell-Ebene durchführen wollen und nicht auf Dateien beschränkt sind, ist es etwas komplexer. Wahrscheinlich die einfachste wird IFileOperation, speziell die CopyItem und CopyItems Methoden zu verwenden. Sie müssen in der Lage sein, von einem PIDL zu einem IShellItem zu gehen, was mit SHCreateItemFromIDList gemacht werden kann.

+0

Oh Entschuldigung, ich beabsichtige, Dateien auf einem Gerät wie einer Digitalkamera zu kopieren. Gibt es einen Weg, dies zu erreichen? – user1924308

+0

Bitte beheben Sie die Frage, um deutlich zu machen, was Sie wirklich wollen. –

+0

Ja, mein Fehler – user1924308