尝试在颤振中检索文件长度,但我收到以下异常 - " FileSystemException: Cannot retrieve length of file"



我正在尝试使用以下代码访问文件的长度:-

File file = File('/storage/emulated/0/Android/data/com.example.mynewapp/files/Pictures/IMG_20200322_202358.jpg');
final length = await file.length();

我得到了以下异常-

FileSystemException:无法检索文件的长度,路径='/storage/emulated/0/Android/data.com/example.mynewapp/files/Pictures/IMG_20200322_202358.jpg'

我遵循了帖子中的建议,并在没有等待的情况下尝试:-

final length = file.lengthSync();

还有

final length = File(file.resolveSymbolicLinksSync()).lengthSync()

但我最终还是得到了同样的例外。

这里有一个使用函数的解决方案,该函数将为您提供格式整洁的字符串形式的文件大小。

进口:

import 'dart:io';
import 'dart:math';

输出:

File image = new File('image.png');
print(getFilesizeString(bytes: image.lengthSync()}); // Output: 17kb, 30mb, 7gb

功能:

// Format File Size
static String getFileSizeString({@required int bytes, int decimals = 0}) {
const suffixes = ["b", "kb", "mb", "gb", "tb"];
var i = (log(bytes) / log(1024)).floor();
return ((bytes / pow(1024, i)).toStringAsFixed(decimals)) + suffixes[i];
}

如果你只想得到一个长度而不关心单位,那么你确实关心大小条件。你可以通过以下代码获得文件大小:

final bytes = image.readAsBytesSync().lengthInBytes; 
final kb = bytes / 1024; 
final mb = kb / 1024;

您有读取此文件的权限吗?尝试检查,然后使用lengthSync直接获取值,而不是值的未来我试过了,添加存储权限后就可以了

File f = new File('your path');
s = f.lengthSync()
print(s);

最新更新