when i create the file for the first time on the phone and when i try to read it i don't get any problem and i read it but when i try to read a file that i didn't create through my app, access is denied. My error is bellow ;
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: FileSystemException: Cannot open file, path = '/storage/emulated/0/Download/Bka_data.cvs' (OS Error: Permission denied, errno = 13)
Write function is:
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 {
}
}
Read function is:
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
}
}
I tried other kind of permission.
To resolve your issue, use
await Permission.manageExternalStorage.request();
instead of
await Permission.storage.request();
and add these permissions if you haven't already done so in your AndroidManifest.xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>