【发布时间】:2019-07-08 14:51:39
【问题描述】:
我将移动某些文件。如何将图像文件从目录移动到另一个目录, 示例文件 img.jpg 从 /storage/emulated/0/Myfolder 到 /storage/emulated/0/Urfolder?
【问题讨论】:
我将移动某些文件。如何将图像文件从目录移动到另一个目录, 示例文件 img.jpg 从 /storage/emulated/0/Myfolder 到 /storage/emulated/0/Urfolder?
【问题讨论】:
await File('/storage/emulated/0/Myfolder').rename('/storage/emulated/0/Urfolder')
如果文件在不同的文件系统上,你需要创建一个新的目标文件,读取源文件并将内容写入目标文件,然后删除源文件。
【讨论】:
rename 可能无法操作系统错误:跨设备链接,errno = 18 例如尝试将文件夹/storage/emulated/0/Android/data/ 下的文件移动到/data/user/0/com.my.app/cache/ 下的新路径时
File.rename 仅在源文件和目标路径位于同一文件系统上时有效,否则您将获得FileSystemException(操作系统错误:跨设备链接,errno = 18)。因此,仅当您确定源文件和目标路径位于同一文件系统上时,才应使用它来移动文件。
例如,当尝试将文件夹 /storage/emulated/0/Android/data/ 下的文件移动到文件夹 /data/user/0/com 下的新路径时.my.app/cache/ 将失败 FileSystemException。
这是一个用于安全移动文件的小实用函数:
Future<File> moveFile(File sourceFile, String newPath) async {
try {
// prefer using rename as it is probably faster
return await sourceFile.rename(newPath);
} on FileSystemException catch (e) {
// if rename fails, copy the source file and then delete it
final newFile = await sourceFile.copy(newPath);
await sourceFile.delete();
return newFile;
}
}
【讨论】: