Dart中file.rename()重命名文件后未更新对象路径问题咨询
解决Dart中File.rename()后原对象路径未更新的问题
这个问题其实是Dart文件系统API的设计特性导致的——File实例是不可变的,调用rename()方法并不会修改原对象的path属性,而是会返回一个指向新路径的全新File实例。这就是为什么你实际看到文件已经重命名,但原file对象的路径还是老样子的原因。
你贴的代码没写完,官方食谱里的示例其实是通过接收rename()的返回值来获取新路径的对象,可能你没注意到这一点。我们来补全并修正代码:
import 'dart:io'; main() async { // 获取系统临时目录 var systemTempDir = Directory.systemTemp; // 创建初始文件 var file = await File('${systemTempDir.path}/foo.txt').create(); print('初始文件路径: ${file.path}'); // 输出以foo.txt结尾的路径 // 执行重命名,并接收返回的新File实例 var renamedFile = await file.rename('${systemTempDir.path}/bar.txt'); // 原对象的路径不会改变 print('原file对象的路径: ${file.path}'); // 仍然是.../foo.txt // 新对象才指向重命名后的路径 print('重命名后的文件路径: ${renamedFile.path}'); // 变为.../bar.txt }
关键要点:
- Dart的
File、Directory、Link这些文件系统类都是不可变对象,它们的属性(比如path)在实例创建后就固定了 - 任何改变文件系统路径的操作(重命名、移动等)都会返回一个新的实例,你需要使用这个新实例来操作更新后的文件/目录
- 原实例仍然会指向旧路径,如果你继续用原实例操作,可能会出现找不到文件的错误
内容的提问来源于stack exchange,提问作者guivho
相关产品推荐
相关产品推荐

