Перейти к содержанию
Fire Monkey от А до Я
  • 0

Не могу открыть файл для чтения из папки Downloads


Алекс2025

Вопрос

Опубликовано (изменено)

Всем привет! Не могу открыть файл для чтения из папки Downloads. Перед открытием проверяю наличие файла, получения прав доступа к ExternalStorage.

Все Ок,все есть но при попытке  загрузке в StringList приложение крашиться. При открытии через Reset все Ок)) Как побороть? Delphi 12.3, SDk 35

Изменено пользователем Алекс2025
опечатка

Рекомендуемые сообщения

  • 0
Опубликовано (изменено)

Если поставить в свойствах проекта галочку на пермишене "MANAGE_EXTERNAL_STORAGE" и потом, после установки приложения на устройстве, ручками дать приложению разрешение "Разрешить управление всеми файлами", то всеравно крашиться приложение при попытке открытия текстового файла всего из пару строк (несмотря на полученные разрешения) 

Изменено пользователем Алекс2025
опечатка
  • 0
  • Модераторы
Опубликовано

Сообщите версию ОС, приложите текстовый файл, а лучше чистый проект с демонстрацией проблемы (код, текстовый файл и т.п.). Возможно, так вам смогут помочь быстрее.

  • 0
Опубликовано (изменено)

Android 11. Самое странное что StringList не может загрузить файл:

LPath :=  TPath.GetSharedDownloadsPath+PathDelim +'file.txt';

StringList.LoadFromFile(LPath );

а Reset(F) построчно читает файл:

LPath :=  TPath.GetSharedDownloadsPath+PathDelim +'file.txt';

AssignFile(F, LPath);

Reset(F);

while not EOF(F) do
  begin
  ReadLn(F,s);

ShowMessage(s);

  end;

CloseFile(F);

Изменено пользователем Алекс2025
опечатка
  • 0
  • Модераторы
Опубликовано

Если это весь код, то рекомендую ознакомиться с такой вещью как "Разрешения и запрос разрешений у пользователя" (Uses Permissions). С версии Android 6 меры безопасности усилили и продолжают это делать по сей день. Ознакомиться можно в любом месте интернета (оф. справка Студии, Андроида, множество статей в интернете, форумы (включая этот), стековерфлоу и т.д.).

Вкратце, поставить галочку в настройках проекта на запрос разрешения для приложения недостаточно, необходимо написать код и в рантайме запрашивать разрешение у пользователя. В вашем случае, предполагаю, необходимо запросить разрешение "Manage external storage"(android.permission.MANAGE_EXTERNAL_STORAGE).

Вот мой пример (тест на Android 11, в настройках проекта установлена галочка "Manage external storage" + выдача разрешения "Разрешить управление всеми файлами" вручную):

var
  LPath: string;
  StringList: TStringList;
begin
  LPath := TPath.Combine(TPath.GetSharedDownloadsPath, 'file1.txt');
  StringList := TStringList.Create;
  try
    StringList.LoadFromFile(LPath);
    ShowMessage(StringList.DelimitedText);
  finally
    StringList.Free;
  end;
end;

Работает!

 

p.s. Пожалуйста, в следующий раз прикладывайте свой чистый проект, так вы сэкономите чужое время и вырастит вероятность получить ответ быстрее .

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...