当我尝试在flutter中读取.csv文件时,我得到一个访问错误

0pizxfdo  于 2023-05-04  发布在  Flutter
关注(0)|答案(1)|浏览(106)

当我第一次在手机上创建文件时,当我尝试读取它时,我没有遇到任何问题,我读取了它,但当我尝试读取我没有通过我的应用程序创建的文件时,访问被拒绝。我的错误在下面;
[错误:flutter/runtime/dart_vm_initializer.cc(41)]无法处理的异常:FileSystemException:无法打开文件,路径= '/storage/emulated/0/Download/Bka_data.cvs'(操作系统错误:权限被拒绝,错误号= 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
  }
}

我试过其他的许可。

0kjbasz6

0kjbasz61#

我认为问题在于,Android实现了范围存储,在其中您无法直接读取从其他应用程序创建的公共文件。
您可以使用下面的包通过最新的存储访问框架获取文件-
https://pub.dev/packages/shared_storage

相关问题