我试图将一个 sqlite 数据库从根包复制到文件系统上以便使用它。
我尝试了许多不同的方法,但最终总是将不正确的数据量写入磁盘。我正在使用的代码如下所示:
Directory appDocDir = await getExternalStorageDirectory();
String path = join(appDocDir.path, "data.db");
bool exists = await new File(path).exists();
if (!exists) {
var out = new File(path).openWrite();
var data = await rootBundle.load("assets/data.sqlite");
var list = data.buffer.asUint8List();
out.write(list);
out.close();
}
Run Code Online (Sandbox Code Playgroud)
我能够通过以下方式做到这一点。
ByteData data = await rootBundle.load("data.sqlite");
List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
Directory appDocDir = await getApplicationDocumentsDirectory()
String path = join(appDocDir.path, "data.db");
await File(path).writeAsBytes(bytes);
Run Code Online (Sandbox Code Playgroud)
您不能将 a 的内容写入Uint8Listusing (旨在对参数进行操作File)。您最终将编写通过调用 获得的UTF -8 编码表示形式,该表示形式可能比列表的实际内容大得多。IOSink.writeStringStringtoString()Uint8List
相反,您可以Uint8List使用 向文件写入 a IOSink.add。
在您提供的示例中,您还可以使用 一次写入整个文件new File(path).writeAsBytes(list)。
| 归档时间: |
|
| 查看次数: |
1981 次 |
| 最近记录: |