当我尝试在 flutter 中读取 .csv 文件时,出现访问错误

问题描述 投票:0回答:2

当我第一次在手机上创建文件时,当我尝试读取它时,我没有遇到任何问题,我读取了它,但是当我尝试读取一个我没有通过我的应用程序创建的文件时,访问被拒绝。 我的错误如下;

[错误: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
  }
}

我尝试了其他类型的许可。

flutter csv file file-permissions readfile
2个回答
0
投票

我认为问题是,Android 实现了范围存储,您不能在其中直接读取从其他应用程序创建的公共文件。

您可以使用以下包通过最新的存储访问框架获取文件-

https://pub.dev/packages/shared_storage


0
投票

我创建的文件出错,因为它的访问权限是-wr--------,我如何将它转换为-wrx------? 谢谢

© www.soinside.com 2019 - 2024. All rights reserved.