use std::{fs, path::Path};
pub fn file_ensure(path: &Path, content: &str) {
if let Some(parent) = path.parent() {
let _ = fs::create_dir_all(parent);
}
if !path.exists() {
let _ = fs::write(path, content);
}
}
pub fn file_backup(path: &Path) {
if path.exists() {
let mut new_name = path.file_name().unwrap_or_default().to_os_string();
new_name.push(".bak");
let backup_path = path.with_file_name(new_name);
let _ = fs::copy(path, backup_path);
}
}
pub fn file_save_force(path: &Path, content: &str) {
if let Some(parent) = path.parent() {
let _ = fs::create_dir_all(parent);
}
fs::write(path, content).expect("Błąd krytyczny: Nie udało się zapisać pliku");
}
pub fn file_save_safe(path: &Path, content: &str) {
file_backup(path);
file_save_force(path, content);
}
pub fn file_remove(path: &Path) {
if path.exists() {
let _ = fs::remove_file(path);
}
}
pub fn file_save_safe_if_changed(path: &Path, content: &str) {
if path.exists() {
if let Ok(existing_content) = fs::read_to_string(path) {
if existing_content == content {
return;
}
}
}
file_save_safe(path, content);
}