Список всех файлов в хранилище с Android-приложением Delphi XE5

Как вывести список файлов в пути к SD-карте и во внутренней памяти?

Я пробовал FindFile с GetDocumentsPath в качестве параметра, и мне не повезло.

Ой, где я могу найти дополнительную документацию или фрагменты кода для Delphi для Android?


person alycia    schedule 18.09.2013    source источник
comment
Как получить доступ к файлам на SD-карте - это обсуждалось много раз в разных формах: stackoverflow.com/questions/2902689/ stackoverflow.com/questions /10549741/ stackoverflow.com/questions/ 9516335/   -  person Andrei Galatyn    schedule 18.09.2013
comment
Это Делфи. Никогда раньше не видел обсуждения.   -  person alycia    schedule 18.09.2013


Ответы (1)


Добавьте System.IOUtils в пункт использования. Затем вы можете использовать код TPath и TDirectory примерно так:

uses
  System.IOUtils, System.Types;

procedure TForm1.Button1Click(Sender: TObject);
var
  FileList: TStringDynArray;
  DocDir: string;
  s: string;
begin
  Memo1.Lines.Clear;
  DocDir := TPath.GetDocumentsPath;
  FileList := TDirectory.GetFiles(DocDir);
  for s in FileList do
    Memo1.Lines.Add(s);
end;
person Ken White    schedule 18.09.2013
comment
Да, я также получаю код из PDF-файла Марко Канту, и файл не найден? - person alycia; 18.09.2013
comment
У вас есть файлы в папке документов устройства? Измените код, чтобы записать DocDir в заметку непосредственно перед строкой FileList :=, и посмотрите, будет ли это там, где вы ожидаете. (Я еще не знал, что у Марко есть PDF-файл для XE5. Он есть на обычном веб-сайте?) - person Ken White; 18.09.2013
comment
Извините, я пробовал в эмуляторе. Я не в своем компьютере. Позже попробую с телефона. IIRC, если я запускаю код в эмуляторе, путь будет /data/data/embarcadero.program/. /data в Android совпадает с буквой диска в Windows? Как насчет внутреннего пути памяти? У Delphi есть API? Я получил PDF-файл с сайта embarcadero.com/resources/white-papers?download=102. - person alycia; 18.09.2013
comment
Другие операционные системы не имеют букв дисков. :-) Вот почему IOUtils имеет TPath, который позволяет вам вызывать одну функцию и получать правильное местоположение независимо от платформы. IOUtils.TPath имеет другие функции для поиска папок, например GetHomePath и GetTempPath. Они задокументированы (ну, по крайней мере, перечислены) в справке и, конечно же, в исходном коде RTL. - person Ken White; 18.09.2013
comment
Возможно, вы захотите увидеть этот ответ и на другой вопрос. - person Ken White; 18.09.2013
comment
Только что включил ноутбук. Да, я уже видел этот вопрос. Почему я не вижу исходный код RTL? Должен ли я загружать полный образ ISO? Не удалось найти файл «System.IOUtils.pas». Я скачиваю только radstudio_xe5_esd.exe с пробной лицензией. - person alycia; 19.09.2013
comment
У вас нет исходного кода, потому что вы используете пробную версию. Однако у вас что-то не так; System.IOUtils.dcu должен находиться в $(DELPHI)\Lib\$(Platform)\$(Target) , где $(Platform) — это OSX, Android, iOS и т. д., а $(Target) — это Release или Debug, и компилятор должен найти его автоматически. Вы уверены, что выбрали подходящую цель для проекта? - person Ken White; 19.09.2013
comment
Конечно, выбран вариант «Целевые платформы (Android) с Android». s12.postimg.org/hf9d78fh9/Capture.gif. Вы имеете в виду, что правильное сообщение об ошибке: Невозможно найти файл «Android\System.IOUtils.pas».? - person alycia; 19.09.2013
comment
Нет. :-) Я имею в виду, что вы вообще не должны получать это сообщение об ошибке, если вы правильно настроили свой проект. В файле .pas не должно быть необходимости, потому что он должен найти уже скомпилированный файл System.IOUtils.dcu в соответствующей папке lib\$(Platform)\$(Target) в зависимости от платформы проекта и выбранной вами конфигурации (выпуск или отладка). Я не знаю, откуда появился диалог, который вы показываете; если файл не может быть найден, это должно быть ошибкой компилятора. Где вы добавили требование System.IOUtils? Это должно быть просто System.IOUtils в предложении использования. - person Ken White; 19.09.2013
comment
Почему TPath.GetHomePath и TPath.GetDocumentsPath показывают один и тот же путь? Я все еще не мог перечислить все файлы во внутреннем хранилище. - person alycia; 19.09.2013