系统临时目录
在进入正题之前先科普一下什么是“系统临时目录”,顾名思义就是装临时文件用的,通常位于C:\Documents and Settings\用户名(一般为Administrator)\Local Settings\Temp目录下(默认为隐藏目录),此文件夹是用户应用的软件(如,winword)转储临时文件的地方,目的在于临时调用与写入。
- 安装程序时:
安装程序时,安装程序会将压缩包内的文件全部释放到此文件夹中,然后再提取,若重装系统进行的是覆盖安装,很容易出现“找不到文件……setup.exe。检查确定路径和文件名都正确而且所需库都能用”的“无法运行16位windows程序”的对话框。 - 运行程序时:
若程序的临时文件没建立成功,一般的程序设计员会使程序运行报错,无法运行程序。
用Dart里查询系统临时目录的代码如下
import 'dart:io';
main(List<String> arguments) {
//获取系统临时目录
var systemTempDir = Directory.systemTemp;
print(systemTempDir.path);
}
这样控制台就会输出本机的系统临时目录地址
删除一个文件、目录或链接
import 'dart:io';
main(List<String> arguments) {
//在系统临时目录下创建文件
Directory.systemTemp.createTemp('my_temp_dir')
.then((directory) {
//检查文件是否存在
directory.exists().then(print);
//删除文件
return directory.delete();
})
.then((directory) {
//再次检查文件是否存在
directory.exists().then(print);
});
}
执行你会发现系统临时目录下没有刚刚创建的文件,因为文件刚创建就被删除了
先输出true证明创建成功,后输出false证明删除成功。(匆匆的你走了,正如你匆匆的来)
重命名一个文件、目录或链接
import 'dart:io';
main(List<String> arguments) {
//获得系统临时目录
var systemTempDir = Directory.systemTemp;
//创建一个文件
new File('${systemTempDir.path}/foo.txt').create()
.then((file) {
print('文件的路径在${file.path}');
//重命名文件
return file.rename('${systemTempDir.path}/bar.txt');
})
.then((file) {
print('文件的路径在${file.path}');
});
}
先新建一个文件foo.txt,然后再重命名为bar.txt,控制台输出如下
通过路径可以看出重命名成功了,然后再看看最终的bar.txt是否真的存在
刚刚创建并重命名的文件是存在的,没问题
查看文件对象的类型
import 'dart:io';
main(List<String> arguments) {
//系统临时目录的列表
Directory.systemTemp.list(recursive:true,followLinks: false)
//读取每一个文件对象
.listen((FileSystemEntity entity) {
//查看文件对象的类型和路径
FileSystemEntity.type(entity.path)
.then((FileSystemEntityType type) {
String label;
//判断文件类型
switch (type) {
case FileSystemEntityType.DIRECTORY:
label = '目录';
break;
case FileSystemEntityType.FILE:
label = '文件';
break;
case FileSystemEntityType.LINK:
label = '链接';
break;
default:
label = '未知';
}
//输出文件类型与路径
print('$label:${entity.path}');
});
});
}
输出系统临时目录下的所有文件及其类型
成功按要求输出了所有文件
获取父目录
import 'dart:io';
main(List<String> arguments) {
Directory.systemTemp.list(recursive: true, followLinks: false)
.listen((FileSystemEntity entity) {
//输出文件对象的父路径
print(entity.parent.path);
});
}
输出系统临时目录里所有文件的父目录