use std::fs; use std::io; use std::path::Path; fn remove_file_or_dir_all<P: AsRef<Path>>(path: P) -> io::Result<()> { match fs::remove_file(&path) { // Unfortunately, there is no ErrorKind for EISDIR Err(e) if e.raw_os_error() == Some(libc::EISDIR) => fs::remove_dir_all(&path), r => r, } } pub fn _remove_dir_contents<P: AsRef<Path>>(path: P) -> Result<(), io::Error> { for entry in fs::read_dir(path)? { let entry_path = entry?.path(); remove_file_or_dir_all(&entry_path)?; } Ok(()) }