当我第一次在手机上创建文件时,当我尝试读取它时,我没有遇到任何问题,我读取了它,但是当我尝试读取一个我没有通过我的应用程序创建的文件时,访问被拒绝。 我的错误如下;
[错误:flutter/runtime/dart_vm_initializer.cc(41)] 未处理 异常:FileSystemException:无法打开文件,路径 = '/storage/emulated/0/Download/Bka_data.cvs'(操作系统错误:权限 被拒绝,errno = 13)
写函数是:
Future<void> restore() async {
final PermissionStatus permissionStatus = await Permission.storage.request();
if (permissionStatus == PermissionStatus.granted) {
final Database db = await SQLHelper.db();
await db.delete("spendinfo");
final fileName = "Bka_data.cvs";
var path = await ExternalPath.getExternalStoragePublicDirectory(ExternalPath.DIRECTORY_DOWNLOADS);
final directory = "$path/$fileName";
final File f = File(directory);
final List<List<dynamic>> csvData = CsvToListConverter().convert(await f.readAsString());
final List<spendinfo> lastList = csvData.map((csvRow) => spendinfo.fromCVSObjetct(csvRow)).toList();
for (var i = 0; i < lastList.length; i++) {
SQLHelper.createItem(lastList[i]);
print(lastList[i].id);
}
} else {
}
}
读取功能为:
Future <void> writeToCvs() async {
final PermissionStatus permissionStatus = await Permission.storage.request();
if (permissionStatus == PermissionStatus.granted) {
final Database db = await SQLHelper.db();
final List<Map<String, dynamic>> allData = await db.query("spendinfo", orderBy: "id") ;
final List<List<dynamic>> rows = <List<dynamic>>[];
var path = await ExternalPath.getExternalStoragePublicDirectory(ExternalPath.DIRECTORY_DOWNLOADS);
print("dir $path");
String file = "$path";
for(final Map<String, dynamic> map in allData) {
final List<dynamic> row = map.values.toList();
print(row) ;
rows.add(row);
}
final String fileName = "Bka_data.cvs";
final directory = "$path/$fileName";
final File f = File(directory);
final String cvs = ListToCsvConverter().convert(rows);
await f.writeAsString(cvs);
//print(filePath);
print("Yüklendi");
} else {
// accses is denied
}
}
我尝试了其他类型的许可。
我认为问题是,Android 实现了范围存储,您不能在其中直接读取从其他应用程序创建的公共文件。
您可以使用以下包通过最新的存储访问框架获取文件-
我创建的文件出错,因为它的访问权限是-wr--------,我如何将它转换为-wrx------? 谢谢