Languages: Python C C++ Go Java Ruby Rust Perl R ← Full TOC

← Rust Index

📁 std::fs — File system — read, write, create, delete, metadata

All functions return Result — errors must be handled. Prefer fs::read_to_string for text, fs::read for binary, fs::write for output.

Docs: doc.rust-lang.org

📋 Types, Functions & Methods

NameSignatureDescription
fs::read_to_stringfn read_to_string<P>(path: P) -> Result<String>Read file to String
fs::writefn write<P,C>(path: P, contents: C) -> Result<()>Write bytes/string to file
fs::readfn read<P>(path: P) -> Result<Vec<u8>>Read file to Vec<u8>
File::openfn open<P>(path: P) -> Result<File>Open file for reading
File::createfn create<P>(path: P) -> Result<File>Create/truncate file for writing
OpenOptionsstruct OpenOptionsBuilder for opening files with flags
OpenOptions::appendfn append(&mut self, append: bool) -> &mut SelfAppend to file
OpenOptions::readfn read(&mut self, read: bool) -> &mut SelfOpen for reading
OpenOptions::writefn write(&mut self, write: bool) -> &mut SelfOpen for writing
OpenOptions::createfn create(&mut self, create: bool) -> &mut SelfCreate if not exists
fs::remove_filefn remove_file<P>(path: P) -> Result<()>Delete file
fs::renamefn rename<P,Q>(from: P, to: Q) -> Result<()>Rename / move file
fs::copyfn copy<P,Q>(from: P, to: Q) -> Result<u64>Copy file contents
fs::create_dirfn create_dir<P>(path: P) -> Result<()>Create directory
fs::create_dir_allfn create_dir_all<P>(path: P) -> Result<()>Create directory tree
fs::remove_dir_allfn remove_dir_all<P>(path: P) -> Result<()>Remove directory recursively
fs::read_dirfn read_dir<P>(path: P) -> Result<ReadDir>Iterate directory entries
fs::metadatafn metadata<P>(path: P) -> Result<Metadata>Return file metadata
Metadata::lenfn len(&self) -> u64File size in bytes
Metadata::is_filefn is_file(&self) -> boolTrue if regular file
Metadata::is_dirfn is_dir(&self) -> boolTrue if directory
Path::existsfn exists(&self) -> boolTrue if path exists
Path::extensionfn extension(&self) -> Option<&OsStr>File extension
PathBuf::fromfn from<S: Into<OsString>>(s: S) -> PathBufCreate owned path

💡 Example

Save as main.rs in a Cargo project and run with cargo run.

use std::fs::{self, File};
use std::io::{BufRead, BufReader, Write};

fn main() -> std::io::Result<()> {
    // Write a file
    fs::write("students.txt", "Alice 95\nBob 87\nCarol 92\nDave 78\n")?;

    // Read entire file as String
    let content = fs::read_to_string("students.txt")?;
    println!("=== File contents ===\n{}", content.trim());

    // Read line by line with BufReader
    let file   = File::open("students.txt")?;
    let reader = BufReader::new(file);
    println!("=== Score >= 90 ===");
    for line in reader.lines() {
        let line  = line?;
        let parts: Vec<&str> = line.split_whitespace().collect();
        if parts.len() == 2 {
            if let Ok(score) = parts[1].parse::<u32>() {
                if score >= 90 { println!("  {} → {}", parts[0], score); }
            }
        }
    }

    // Append
    let mut f = fs::OpenOptions::new().append(true).open("students.txt")?;
    writeln!(f, "Eve 98")?;

    // Metadata
    let meta = fs::metadata("students.txt")?;
    println!("Size: {} bytes  is_file: {}", meta.len(), meta.is_file());

    // Directory operations
    fs::create_dir_all("data/reports")?;
    for entry in fs::read_dir(".")? {
        let entry = entry?;
        if entry.path().extension().and_then(|e| e.to_str()) == Some("txt") {
            println!("Found: {}", entry.path().display());
        }
    }
    fs::remove_dir_all("data")?;
    fs::remove_file("students.txt")?;
    println!("Cleanup done.");
    Ok(())
}
// cargo run

← std::io  |  🏠 Index  |  std::collections →