8 个稳定版本
3.0.1 | 2023年2月21日 |
---|---|
3.0.0 | 2023年2月19日 |
2.2.3 | 2023年2月2日 |
2.2.2 | 2023年1月21日 |
0.1.2 |
|
#13 在 #搜索路径
每月 91 次下载
74KB
989 行
Qfile
Qfile crate提供了通过路径访问文件的功能,不区分大小写,包括自动检测、创建带有新文件的路径或打开现有文件。它包含几个子模块来处理文件操作的各个方面,如初始化、读取和写入。该crate还定义了一些与文件操作相关的自定义错误。
qfile 不是QT框架中qfile的Rust版本
路径语法
Unix格式
let path1 = "File.txt";
let path2 = "./File.txt";
let path3 = "../../File.txt";
let path4 = String::from("Folder/Folder/File.txt");
Windows格式
let path1 = "File.txt";
let path2 = ".\\File.txt";
let path3 = "..\\..\\File.txt";
let path4 = "D:\\Folder\\file.txt";
let path5 = r"D:\Folder\file.txt";
let path6 = String::from("D:\\Folder\\file.txt");
路径查找器
这是启动目录搜索的方法。它接受搜索位置、要搜索的文件名、要排除的目录、是否跟随符号链接以及用于发送结果的通道。
它使用rayon crate在多个线程上并行搜索以提高性能。
算法首先过滤掉排除的目录,然后遍历剩余的目录以找到所有匹配指定搜索标准的文件。如果找到匹配项,则将文件的路径发送到Sender对象。
use qfile::{QFilePath,Directory};
use std::sync::mpsc;
let (tx, rx) = mpsc::channel();
QFilePath::find_paths(
// specifies the directories to search from, where the search should start.
Directory::ThisPlace(vec!["src", "another_folder", "/home/user/my_project"]),
// names of items to search in the file system
vec!["main.rs", "lib.rs", "photo-1-2.jpg"],
// folders to exclude search
Some(vec!["src/tests", "another_folder/tmp"]),
// follow links
false,
// Sender channel
tx,
)?;
for path in rx {
println!("{}", path.display().to_string());
}
写入文件
写入文件的方法取决于当前上下文,不区分大小写
- 如果文件存在 - 向文件添加新内容
- 如果文件不存在 - 创建文件和路径中指定的所有父目录(如有必要)。之后写入新内容
示例(同步代码)
use qfile::{QFilePath, QTraitSync};
// real path : myFolder/file.txt
let mut file = QFilePath::add_path("MyFolder/file.TXT")?;
file.auto_write("text1 text1 text1")?;
file.auto_write("text2 text2 text2")?;
示例(异步代码)
use qfile::{QFilePath, QTraitAsync};
// real path : myFolder/file.txt
let mut file = QFilePath::async_add_path("MyFolder/file.TXT").await?;
file.lock().await.auto_write("text1 text1 text1").await?;
file.lock().await.auto_write("text2 text2 text2").await?;
- 如果路径存在,我们处理文件
Unix格式 | Windows格式 | |
---|---|---|
我们指定的路径: | folder1/FolDER2/file.TXT |
folder1\FolDER2\file.TXT |
实际路径 : | ./Folder1/Folder2/file.txt |
.\Folder1\Folder2\file.txt |
结果 : | ./Folder1/Folder2/file.txt |
.\Folder1\Folder2\file.txt |
- 如果文件/路径未找到,则创建带有文件的新路径
Unix格式 | Windows格式 | |
---|---|---|
我们指定的路径: | ./main_folder/folder_new/file.txt |
.\main_folder\folder_new\file.txt |
实际路径 : | ./Main_Folder |
.\Main_Folder |
结果 : | ./Main_Folder/folder_new/file.txt |
.\Main_Folder\folder_new\file.txt |
- Windows文件系统将文件和目录名视为不区分大小写。以下文件被视为等效文件:
file.txt
和FILE.txt
(尽管Windows中的路径不区分大小写,例如:..\FOLDER\file.txt
),您可以通过get_path_string()
或get_path_buf()
返回一个区分大小写的路径)。
读取文件
读取文件内容的方法(String
),不区分大小写
示例(同步代码)
use qfile::{QFilePath, QTraitSync};
// real path : myFolder/file.txt
let mut file = QFilePath::add_path("MyFolder/file.TXT")?;
let text = file.read()?;
println!("content: {}", text);
示例(异步代码)
use qfile::{QFilePath, QTraitAsync};
// real path : myFolder/file.txt
let mut file = QFilePath::async_add_path("MyFolder/file.TXT").await?;
let text = file.lock().await.async_read().await?;
println!("content: {}", text);
变更日志
许可证
依赖项
~5–14MB
~153K SLoC