【问题标题】:Select and load txt file to android application (Delphi-XE5)选择txt文件并将其加载到android应用程序(Delphi-XE5)
【发布时间】:2013-11-07 09:30:07
【问题描述】:

我想浏览 SD 卡,选择目录和文件,然后将 txt 文件加载到我由 Delphi XE5 创建的 Android 应用程序中。

有任何标准的组件或方法吗?喜欢 OpedFileDialog 吗?

【问题讨论】:

    标签: delphi delphi-xe5


    【解决方案1】:

    Android 上没有 TOpenFileDialog 的等效项。它不是操作系统的一部分,并且在面向 Android 时无法从 Component Palette 中获得。

    您可以通过在设计器中查看表单,然后检查组件面板中的Dialogs 选项卡来看到这一点;所有组件都被禁用,这意味着它们不适用于目标平台。将鼠标悬停在其中任何一个上表示它们适用于 Win32、Win64 和 OS X,但不适用于 iOS 或 Android。

    您始终可以使用IOUtils.TPath 中提供的功能,基于TForm(或者更好的是TPopup,它更适合移动设备的典型应用程序流程)构建自己的用于检索目录和文件名。获得文件名后,加载它的功能就很简单了,并且可以通过多种方式使用 - 这里有一些:

    • 使用TFile.ReadAllLines(同样来自IOUtils)加载它
    • TStringList.LoadFromFile
    • 使用TFileStream.LoadFromFile
    • 使用TMemo.Lines.LoadFromFile

    【讨论】:

    • Android 没有用于选择文件的标准对话框,但它确实有一个用于创建自定义对话框的 API,所以我很惊讶 Embarcadero 没有实现 TOpenDialog/TOpenFileDialog 来使用内部自定义对话框/表单。
    • @RemyLebeau:是的,我也是。我希望这是由于 XE4 之后 XE5 中快速发布了 Android 支持,并且它将在某个更新/未来版本中添加。
    【解决方案2】:

    使用TStringListTStringList.loadFromFile(file);

    procedure TForm1.Button1Click(Sender: TObject);
    var
       TextFile : TStringList;
       FileName : string;
    begin
    
    try
      textFile := TStringList.Create;
      try
      {$IFDEF ANDROID}//if the operative system is Android
         FileName := Format('%smyFile.txt',[GetHomePath]);
      {$ENDIF ANDROID}
    
      {$IFDEF WIN32}
         FileName := Format('%smyFile.txt',[ExtractFilePath(ParamStr(0))]);
      {$ENDIF WIN32}
    
      if FileExists(FileName) then begin
         textFile.LoadFromFile(FileName); //load the file in TStringList
         showmessage(textfile.Text);//there is the text
      end
      else begin showMessage('File not exists, Create New File');
    
         TextFile.Text := 'There is a new File (Here the contents)';
         TextFile.SaveToFile(FileName);//create a new file from a TStringList
    
      end;
      finally
         textFile.Free;
      end;
    except
      on E : Exception do ShowMessage('ClassError: '+e.ClassName+#13#13+'Message: '+e.Message);
       end;
    end;
    

    【讨论】:

    • 您错过了问题的主要部分,即关于 Android 的 OpenFileDialog 并使用它来选择目录并允许用户选择文件。如果不先做那部分,就没有FileName 可以加载机智TStringList.LoadFromFile
    • Android 平台不支持名称:TOpenDialog 单位:FMX.Dialogs 包:dclfmxstd190.bpl 支持的平台:32 位 Windows 64 位 Windows OS X
    • 不要在评论中告诉。我已经知道了(见我的回答,尤其是前两段)。发帖人问了这个问题;你应该告诉他们。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2023-03-18
    相关资源
    最近更新 更多