Delphi XE5 Android问题定位文件

Posted

技术标签:

【中文标题】Delphi XE5 Android问题定位文件【英文标题】:Delphi XE5 Android problems locating file 【发布时间】: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。我只是将我的设备作为外部驱动器浏览。使用什么路径以便我的电脑和我的应用程序都可以访问同一个文件夹? 【参考方案1】:

我终于找到了解决这个问题的方法。 通过使用 TPath.GetSharedDocumentsPath,如果在保存时设备未连接为驱动器,我可以在 pc 上看到从应用程序保存的文件(在this page 中提到)。 E.i.使用app时,电脑不能同时使用sdcard作为驱动器。

【讨论】:

以上是关于Delphi XE5 Android问题定位文件的主要内容,如果未能解决你的问题,请参考以下文章

Delphi XE5 Android Dialogs 对话框(模拟做了一套)

虚拟键盘 - Android - Delphi XE5

Delphi XE5 图解为Android应用制作签名

Delphi XE5 图解为Android应用制作签名

Delphi XE5 Android 调用手机震动(通过JObject测试是否支持震动)

delphi xe5 android 开发实现手机打电话和发短信