qfile 2.2.3

Crate for accessing a file by path, case insensitive. Automatic detection, create a path with a new file or open an existing file
Documentation
qfile-2.2.3 has been yanked.

Crate Docs Changelog

Qfile

Crate for accessing a file by path, case insensitive. Automatic detection, create a path with a new file or open an existing file.

Examples

    // add_path() - constructor for adding a file path. 
    // the real file path: `./FOLDER/folder/File.txt`
    let mut file = QFilePath::add_path("./folder/folder/file.txt").unwrap();
    // after using auto_write() or read() methods, and if Ok(),
    // we get/save the correct path after the first method call,
    // which will be used as a cache when used again.
    file.auto_write("text_1").unwrap();
    // we get the saved path from the cache
    file.auto_write("text_2").unwrap();
    assert_eq!(file.read().unwrap(), "text_1text_2");
  

use std::error::Error;
use qfile::*;
fn create_files(count: i32) -> Result<(), Box<dyn Error>> {
    for i in 0..=count {
        QFilePath::add_path(format!("FolderPack/file-{}.txt", i))?.auto_write("")?;
    }
    Ok(())
}
fn main() {
    create_files(100).unwrap();
}

    use qfile::*;
    use std::io::BufReader;
    use std::io::Read;
    // The file already exists
    // The real file path: "./My_First_Folder/New_File.txt"
    // File content: Hello World
    let file = QFilePath::add_path("my_first_Folder/new_file.txt")
        .unwrap()
        .get_file(Permissions::RW)
        .unwrap();
    let mut buffer = Vec::new();
    // Read file into vector.
    BufReader::new(file).read_to_end(&mut buffer).unwrap();
    // Show result
    assert_eq!(
        buffer,
        vec![72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]
    )

Paths syntax

Linux

folder/folder/file.txt
./folder/folder/file.txt

    let path1 = "File.txt";
    let path2 = "./File.txt";
    let path3 = "../../File.txt";
    let path4 = String::from("Folder/Folder/File.txt");

Windows

folder\\folder\\file.txt
.\\folder\\folder\\file.txt
D:\\folder\\folder\\file.txt

    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");

Auto mode

Creates or opens if a file exists (case insensitive)

Example

    let mut file = QFilePath::add_path("./file.txt").unwrap();
    file.auto_write("ok").unwrap();
    //=========
    //*code*
    //=========
    file.auto_write("ok").unwrap();
    assert_eq(file.read().unwrap(),"okok");
    

Linux & Windows

  • If the path exists, we work with the file (case insensitive)
Linux Windows
The path we specified: folder1/FolDER2/file.TXT folder1\FolDER2\file.TXT
Real path : ./Folder1/Folder2/file.txt .\Folder1\Folder2\file.txt
Result : ./Folder1/Folder2/file.txt .\Folder1\Folder2\file.txt
  • If the file/path is not found, creates a new path with the file
Linux Windows
The path we specified: ./main_folder/folder_new/file.txt .\main_folder\folder_new\file.txt
Real path : ./Main_Folder .\Main_Folder
Result : ./Main_Folder/folder_new/file.txt .\Main_Folder\folder_new\file.txt
  • The Windows file system treats file and directory names as case insensitive. file.txt and FILE.txt will be treated as equivalent files (Although the path is case insensitive in windows (..\FOLDER\file.txt), you can return a case-sensitive path with : get_path_str() or get_path_buf()).

Changelog

List

License

MIT