Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Pfad zum mobilen Gerät (https://www.delphipraxis.net/99028-pfad-zum-mobilen-geraet.html)

Brakeman 5. Sep 2007 19:16


Pfad zum mobilen Gerät
 
Hallo,
ich möchte per Delphi-Programm eine Datei vom PC auf meinen PDA kopieren. Dazu benötige ich jedoch den Pfad zum "mobilen Gerät". Bei meiner Suche im Forum bin ich auf die Methode SHGetSpecialFolder gestoßen, leider erfährt man in diesen Threads nur etwas zu den Pfaden auf dem PC (Eigene Dateien usw.).

Kann mir jemand helfen, wie ich den Pfad zum mobilen Gerät ermitteln kann?

Danke!

rwachtel 5. Sep 2007 19:25

Re: Pfad zum mobilen Gerät
 
Mobile Geräte haben (wenn sie sich nicht als Wechseldatenspeicher anmelden) keinen Pfad im lokalen Dateisystem.

Stichwort wäre hier RAPI.

In der aktuellen Toolbox ist ein Bericht, ansonsten findet Google auch einiges.

Hier gibt es eine fertige Unit.

Brakeman 5. Sep 2007 20:32

Re: Pfad zum mobilen Gerät
 
Danke für den RAPI-Tipp. Ich habe die genannte rapi.pas jetzt mal in mein Projekt eingebunden und versuche folgendes:

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls,ShellAPI, rapi;

...

CeRapiInit;
CeCopyFile('c:\temp\test.txt','\My Documents\Privat\test.txt',TRUE);
CeRapiUnInit;
Leider ohne Erfolg. Es passiert rein gar nichts. Die Quelldatei existiert, jedoch bin ich mir nicht sicher, wie ich bei der Funktion die Zieldatei angebe.

rwachtel 5. Sep 2007 20:43

Re: Pfad zum mobilen Gerät
 
Das ist ja auch die Methode zum Kopieren von Dateien innerhalb des mobilen Geräts... ;)

Auf der genannten Seite findet sich auch unter Punkt 5 der Hinweis auf CeReadFile und CeWriteFile mit entsprechenden Beispielen aus dem SDK.

Ob und was sich da u.U. seit Erscheinen des Artikels geändert hat, müsstest Du aber selbst im genannten MSDN-Link nachschlagen.

// Edit: http://www.google.de/search?q=delphi+rapi+copyfile liefert auch noch einige brauchbare Ergebnisse.

Brakeman 5. Sep 2007 21:38

Re: Pfad zum mobilen Gerät
 
Ich habe nochmal etwas probiert und gesucht. Rausgekommen ist das hier:

Delphi-Quellcode:
procedure TForm1.SpeedButton4Click(Sender: TObject);
var
    HSrc,HDes    : THandle;
    Buffer       : Pointer;
    BytesToRead,
    BytesReading,
    BytesWritten : DWord;
    o1            : Poverlapped;
begin
Buffer:=nil;

CeRapiInit;
HSrc := CreateFile ('c:\temp\test.txt',Generic_Read ,File_Share_Read ,nil,Open_Existing,0,0);
HDes := CeCreateFile ('\My Documents\Privat\test9.txt',Generic_Write,File_Share_Write,nil,Create_Always,0,0);
GetMem (Buffer, GetFileSize (HSrc, Buffer));
BytesToRead := GetFileSize (HSrc, Buffer);
ReadFile   (HSrc, Buffer^, BytesToRead, BytesReading, @o1);
CeWriteFile  (HDes, @Buffer^, BytesReading, BytesWritten, @o1);
CloseHandle (HSrc);
CeCloseHandle (HDes);
CeRapiUnInit;

end;
Die Datei auf dem PPC wird auch angelegt, aber ohne Inhalt. Weiss einer weiter?

msysteme 6. Nov 2007 21:36

Re: Pfad zum mobilen Gerät
 
Hi,
hier der Code funktioniert!

procedure TForm1.CopyPCtoCE(PCfromFile: PChar; CEtoFile: PWideChar);
var
hsrc : DWORD;
hdes : DWORD;
Buffer : Pointer;
BytesToRead : DWORD;
BytesReading : DWORD;
BytesWritten : DWORD;
dwSize : DWORD;
begin
CeRapiInit;
HSrc := CreateFile (PCFromFile,Generic_Read ,File_Share_Read ,nil,Open_Existing,0,0);
HDes := CECreateFile(CEtoFile,Generic_Write,File_Share_Wri te,nil,Create_Always,0,0);
try
dwSize := GetFileSize(HSrc,nil);
Buffer := AllocMem(dwSize);
try
BytesToRead := GetFileSize (HSrc, nil);
ReadFile(HSrc, Buffer^, BytesToRead, BytesReading, nil);
CEWriteFile(HDes, @Buffer^, BytesReading, BytesWritten, nil);
finally
FreeMem(Buffer,dwSize);
end;
finally
CECloseHandle (HDes);
CloseHandle (HSrc);
CeRapiUnInit;
end;

end;


procedure TForm1.Button1Click(Sender: TObject);
begin
CopyPCtoCE('c:\d7cover.jpg','\my documents\d7cover.jpg');
end;



Aber besser noch die Variante: CE nach PC passt gut auf habe mich richtig reingehangen.

procedure TForm1.CopyCEtoPC(CEfromFile: PWideChar; PCtoFile: PChar);
var
hsrc : DWORD;
hdes : DWORD;
Buffer : Pointer;
BytesToRead : DWORD;
BytesReading : DWORD;
BytesWritten : DWORD;
dwSize : DWORD;
begin
CeRapiInit;
HSrc := CECreateFile (CEfromFile,Generic_Read ,File_Share_Read ,nil,Open_Existing,0,0);
HDes := CreateFile(PCtoFile,Generic_Write,File_Share_Write ,nil,Create_Always,0,0);
try
dwSize := CEGetFileSize(HSrc, nil); // @Buffer^ wenn dann ist es nur dieser Pointer
Buffer := AllocMem(dwSize);
try
BytesToRead := CEGetFileSize (HSrc, nil); //@Buffer^
CEReadFile(HSrc, @Buffer^, BytestoRead, BytesReading, nil);
WriteFile(HDes, Buffer^, BytesReading, BytesWritten, nil);
finally
FreeMem(Buffer,dwSize);
end;
finally
CECloseHandle (HSrc);
CloseHandle (HDes);
CeRapiUnInit;
end;
end;


Ich bin neu hier und hoffen auch mal geholfen zu haben.


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