File.rename
работает только в том случае, если исходный файл и путь назначения находятся в одной файловой системе, в противном случае вы получите FileSystemException
( Ошибка ОС: ссылка между устройствами, errno = 18 ).Поэтому его следует использовать для перемещения файла, только если вы уверены, что исходный файл и путь назначения находятся в одной файловой системе.
Например, при попытке переместить файл в папку /хранилище / эмулируется / 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;
}
}