#不区分大小写 #文件 #搜索文件 #打开文件 #搜索路径 #文件I/O #搜索

已删除 qfile

通过路径访问文件的Crate,不区分大小写。自动检测,创建带有新文件的路径或打开现有文件

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 2022年11月28日

#13#搜索路径

Download history 75/week @ 2024-03-30 16/week @ 2024-04-06 2/week @ 2024-06-29 89/week @ 2024-07-06

每月 91 次下载

MIT 许可证

74KB
989

Crate Docs Changelog

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.txtFILE.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);

变更日志

列表

许可证

MIT

依赖项

~5–14MB
~153K SLoC