Решена

Файл не найден (удален или перемещен) - РЕШЕНО

Здравствуйте.

Стал свидетелем следующей ситуации. Файл dvr.pfb был скачан на телефон в каталог Downloads памяти телефона.

В один день я не смог открыть базу. Вместо названия на главной странице я видел знак вопроса, а при попытке открыть появлялась ошибка "Файл не найден (удален или перемещен)". В каталоге Downloads файла не было(в корзине тоже)

Мне не удалось понять куда делся файл, а на гугл диске был бэкап месячной давности. Я открыл его напрямую из гугл-диска и с досадой осознал что многой информации там нет. Ещё не осознавая почему, я решил так же как и раньше скачать его с гугл-диска в папку Downloads после чего я с удивлением обнаружил что на главной странице вместо знака вопроса появилось название базы dvr.pfb и размер её был больше чем бэкапа месячной давности. Содержимое базы было "смешаным". Вроде присутствовали свежие транзакции, но не было некоторых счетов. В этот момент мне пришла идея сделать следующее - я удалил из каталога Downloads файл БД dvr.pfb и создал ПУСТОЙ файл с таким же именем. И о чудо - в программе я виже свою недавно потерянную базу )

Теперь надо разобраться в этом вопросе. Полагаю что дело обстоит так:

В Linux мы не работаем с файлами напрямую, а с жетскими ссылками на их двоичное содержимое. Также есть особенность, что "файл" не будет удален, пока существует хотя бы одна жесткая ссылка. Получается что куда-то делать жесткая ссылка /Память телефона/Downloads/dvr.pfb, но сам файл не был удален, поскольку программа создала на эти данные ещё одну ссылку. И проблема решилась как только я восстановил ссылку /Память телефона/Downloads/dvr.pfb.

Отсюда есть предложение, что на главной странице где предлагается выбрать или загрузить БД, на плашках с подключенными БД отображать их метоположение. Чтоб если что было понятно где провести описанную выше процедуру )

П.С. Поправьте меня, если на самом деле произошло что-то другое, а не то что я описал.

Комментировать

Комментарии (5)

фото
1

Скриншот ошибки

фото
1

Добрый день.

Программа работает с внешними файлами через стандартное API Storage Access Framework: https://developer.android.com/guide/topics/providers/document-provider

Программа имеет очень ограниченные права на внешний файл (чтение и, опционально, запись). Ссылка выглядит условно так: content://provider/elvnqerjvbqeliugvb - структура данных провайдера и место файла в ней программе недоступны. За хранение данных и загрузку изменений в облако отвечает провайдер (Google Drive в данном случае).

Гугл диск глючит, может перестать обновлять данные в облаке, а потом заменить свежую локальную копию старой копией из облака. Хранить там файл не рекомендуется, см последний абзац инструкции: https://community.personalfinances.ru/knowledge-base/article/sync_mobile

фото
1

Спасибо за ответ. Но мое повествование было о другом и касалось особенностей локального хранения файла, а не на гугл диске.

фото
1

Разницы нет. С точки зрения программы, что в облаке, что локально - все едино. О местонахождении файла можно только догадаться из названия провайдера в начале ссылки content://...

фото
1

Когда Вы подсунули программе пустой файл, она решила что он поврежден и восстановила данные из кеша синхронизации.