use std::{fs};
use std::fs::{DirBuilder};
use std::path::{Path};
pub fn create_dir(mut path: &str) -> Result<(), String> {
if path.contains(".") {
let data = Path::new(path);
let data = data.parent().unwrap();
path = data.to_str().unwrap();
}
return match DirBuilder::new().recursive(true).create(path) {
Ok(_) => {
Ok(())
}
Err(e) => {
Err(e.to_string())
}
};
}
pub fn get_file_list(path: &str) -> Result<Vec<String>, String> {
let mut files = vec![];
let paths = match fs::read_dir(path) {
Ok(e) => e,
Err(e) => {
return Err(e.to_string());
}
};
for path in paths {
match path {
Ok(e) => {
if e.path().is_file() {
let e = e.path().clone();
let file_name = e.as_os_str().to_str().unwrap().clone();
files.push(file_name.to_string());
} else {
if e.path().is_dir() {
let e = e.path().clone();
let dir_name = e.as_os_str().to_str().unwrap().clone();
match get_file_list(dir_name) {
Ok(e) => {
files.extend(e);
}
Err(e) => {
return Err(e.to_string());
}
};
}
}
}
Err(e) => {
return Err(e.to_string());
}
}
}
Ok(files)
}
pub fn get_dir_list(path: &str) -> Result<Vec<String>, String> {
let mut dirs = vec![];
let paths = fs::read_dir(path).unwrap();
for path in paths {
match path {
Ok(e) => {
if e.path().is_dir() {
dirs.push(e.file_name().to_str().unwrap().to_string().clone());
}
}
Err(e) => {
return Err(e.to_string());
}
}
}
return Ok(dirs);
}