【发布时间】:2014-06-23 09:55:59
【问题描述】:
我无法从我的电脑上查找并打开存储在手机上的文件。 尽管this answer 有很好的解决方案,但我无法让它工作。 我在 HTC Sensation Z710e 上运行
这是我要运行的代码:
function GetSDCardPath: string;
var MusicPathLength: integer;
MusicPath, SDCardPath: string;
begin
MusicPath:=System.IOUtils.TPath.GetSharedMusicPath;
MusicPathLength:=Length(MusicPath);
SDCardPath:=Copy(MusicPath, 0, MusicPathLength-5);
Result:=SDCardPath;
end;
procedure TForm3.Button1Click(Sender: TObject);
var sr:TSearchRec;
begin
CardPath:=TPath.Combine(GetSDCardPath,'*.*');
if (FindFirst(CardPath,faNormal,sr)=0) then
begin
repeat
Memo1.Lines.Add(sr.Name);
until FindNext(sr)<>0;
FindClose(sr);
end;
end;
我用下面的代码做了第二次测试,当文件名出现在文件列表中时,我显然可以存储一个文件,但它似乎没有存储在 sdcard 上,至少不是作为我的外部出现的那个驱动器 F:在我的电脑上。 TPath.GetDocumentsPath 应该指向 sdcard,不是吗?
procedure TForm3.Button1Click(Sender: TObject);
var sr:TSearchRec;
begin
CardPath:=TPath.Combine(TPath.GetDocumentsPath,'*.*');
Memo1.Lines.Add(CardPath);
if (FindFirst(CardPath,faAnyFile,sr)=0) then
begin
repeat
Memo1.Lines.Add(sr.Name);
until FindNext(sr)<>0;
FindClose(sr);
end;
end;
procedure TForm3.WriteClick(Sender: TObject);
var
s: string;
F:TextFile;
begin
Memo1.Lines.Clear;
s := TPath.Combine(TPath.GetDocumentsPath,'file2.txt');
AssignFile(F,s);
ReWrite(F);
Writeln(F,'Test');
CloseFile(F);
end;
首先我单击Write 按钮写入文件,然后单击Button1 列出目录中的文件。 CardPath 是 /data/data/com.embarcadero.TestApp2/files/。 我的电脑上有一个 Android/data/com.embarcadero.TestApp2/files/ 文件夹,但没有文件。文件是否存储在我的设备内部?
【问题讨论】:
-
我忘了提到从电脑上看到的目录结构和我从不同的 TPath.GetPath 字符串中读取的内容差异很大,以至于我无法弄清楚我的文件所在的位置。
-
根据您的电脑,确切的路径是什么?你调用了一个函数
GetSDCardPath,但你只使用了GetSharedMusicPath,它可能不在你的可移动SD卡上。您在设备上看到的确切路径是什么?你忘了告诉那个。可移动sd卡上的文件是根据你的电脑吗? -
添加了另一个测试代码。
-
/data/data/..... 是内部存储器。 Android/data/data/.... 是外部存储器,可以在设备中或可移动 sd 卡上。你的电脑/Eclipse 看不到内存。
-
我没有使用 Eclipse。我只是将我的设备作为外部驱动器浏览。使用什么路径以便我的电脑和我的应用程序都可以访问同一个文件夹?
标签: android delphi delphi-xe5 file-location