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
| Name | Signature | Description |
|---|---|---|
| fs::read_to_string | fn read_to_string<P>(path: P) -> Result<String> | Read file to String |
| fs::write | fn write<P,C>(path: P, contents: C) -> Result<()> | Write bytes/string to file |
| fs::read | fn read<P>(path: P) -> Result<Vec<u8>> | Read file to Vec<u8> |
| File::open | fn open<P>(path: P) -> Result<File> | Open file for reading |
| File::create | fn create<P>(path: P) -> Result<File> | Create/truncate file for writing |
| OpenOptions | struct OpenOptions | Builder for opening files with flags |
| OpenOptions::append | fn append(&mut self, append: bool) -> &mut Self | Append to file |
| OpenOptions::read | fn read(&mut self, read: bool) -> &mut Self | Open for reading |
| OpenOptions::write | fn write(&mut self, write: bool) -> &mut Self | Open for writing |
| OpenOptions::create | fn create(&mut self, create: bool) -> &mut Self | Create if not exists |
| fs::remove_file | fn remove_file<P>(path: P) -> Result<()> | Delete file |
| fs::rename | fn rename<P,Q>(from: P, to: Q) -> Result<()> | Rename / move file |
| fs::copy | fn copy<P,Q>(from: P, to: Q) -> Result<u64> | Copy file contents |
| fs::create_dir | fn create_dir<P>(path: P) -> Result<()> | Create directory |
| fs::create_dir_all | fn create_dir_all<P>(path: P) -> Result<()> | Create directory tree |
| fs::remove_dir_all | fn remove_dir_all<P>(path: P) -> Result<()> | Remove directory recursively |
| fs::read_dir | fn read_dir<P>(path: P) -> Result<ReadDir> | Iterate directory entries |
| fs::metadata | fn metadata<P>(path: P) -> Result<Metadata> | Return file metadata |
| Metadata::len | fn len(&self) -> u64 | File size in bytes |
| Metadata::is_file | fn is_file(&self) -> bool | True if regular file |
| Metadata::is_dir | fn is_dir(&self) -> bool | True if directory |
| Path::exists | fn exists(&self) -> bool | True if path exists |
| Path::extension | fn extension(&self) -> Option<&OsStr> | File extension |
| PathBuf::from | fn from<S: Into<OsString>>(s: S) -> PathBuf | Create owned path |
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