Копирование большого файла не работает во флаттере - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь использовать файл базы данных размером 665 МБ (файл SQLite) для своего приложения.(файл необходим, поскольку он предоставляет автономные данные для приложения общественного транспорта. Поэтому я не могу сделать его меньше).

Пока что при использовании любого файла SQLite во Flutter я обычно копирую его в коде.Исходное местоположение файла ./assets/db_file.db.Местоположение файла: DocumentsDirectory.

. Теперь у меня проблема с тем, что копирование файла не работает для моего большого DB-файла размером 665 МБ.

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

(для небольших файлов этот код хорошо работает) ...:

(также в симуляторе код работает хорошо, нетнезависимо от размера файла. Проблема возникает только на реальном iPhone) ...

Directory directory = await getApplicationDocumentsDirectory();
var dbPath = join(directory.path, "destinationFile.db");
if (FileSystemEntity.typeSync(dbPath) == FileSystemEntityType.notFound) {
  ByteData data = await rootBundle.load("assets/largeFile.db");
  List<int> bytes =
      data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
  await File(dbPath).writeAsBytes(bytes);
}

Для моего файла размером 665 МБ вышеуказанный код вылетает - без сообщения об ошибке: /

следующая строка кода:

ByteData data = await rootBundle.load("assets/largeFile.db");

Вопросы:

  • Есть ли способ улучшить мой код выше для очень больших файлов, чтобы не происходило аварийное завершение

  • есть ли способ предоставить db-файл внутри папки Documents в первую очередь (как часть комплекта, то есть, чтобы копирование не требовалось)?

  • как мне в любом случае работать с таким большим файлом ??

...