use std::io::{Read, Seek, SeekFrom, Write};
use crate::myerror::MyError;
use std::path::Path;
pub fn file_read(path:&str)->Result<String,MyError>{
let mut file = std::fs::File::open(path)?;
let mut contents = String::new();
file.read_to_string(&mut contents)?;
Ok(contents)
}
pub fn file_write(path:&str,content:&str)-> Result<usize,MyError> {
let mut file=std::fs::OpenOptions::new().create(true).append(false).write(true).truncate(true).open(path)?;
let bytes=content.as_bytes();
file.write_all(bytes)?;
file.write_all("\n".as_bytes());
Ok(bytes.len())
}
pub fn file_read_string(path:&str)->String{
let fileresult=file_read(path);
fileresult.is_err() && return String::new();
fileresult.unwrap()
}
pub fn file_read_bytes(path:&str)->Result<Vec<u8>,MyError>{
let mut file = std::fs::File::open(path)?;
let mut bytes= vec![];
file.seek(SeekFrom::Start(0));
file.read_to_end(&mut bytes);
Ok(bytes)
}
pub fn file_write_bytes(path:&str,bytes:&[u8])-> Result<usize,MyError> {
let target_path = Path::new(path);
let mut file:std::fs::File;
if !target_path.exists(){
file = std::fs::File::create(path)?;
} else{
file = std::fs::File::open(path)?;
}
file.write_all(bytes)?;
Ok(bytes.len())
}
pub fn file_append(path:&str,content:&str)-> Result<usize,MyError> {
let mut file=std::fs::OpenOptions::new().create(true).write(true).append(true).open(path)?;
let bytes=content.as_bytes();
file.write_all(bytes)?;
file.write_all("\n".as_bytes());
Ok(bytes.len())
}