1use std::fs::{create_dir_all, remove_dir_all};
2use std::path::{Path, Component};
3use std::env::{temp_dir};
4
5pub fn is_valid(path: &str) -> bool {
6 let p = Path::new(path);
7 let mut t = temp_dir();
8
9 if p.has_root() {
10 for c in p.components() {
11 match c {
12 Component::Prefix(_p) => {
13 continue;
14 }
15 Component::RootDir => {
16 continue;
17 }
18 _ => {
19 t = t.join(c);
20 }
21 }
22 }
23 } else {
24 t = t.join(p);
25 }
26
27 match create_dir_all(&t) {
28 Err(_e) => return false,
29 Ok(()) => {
30 match remove_dir_all(&t) {
31 Err(_e) => return false,
32 Ok(()) => return true,
33 }
34 }
35 }
36}
37
38#[cfg(test)]
39mod tests {
40 use super::*;
41
42 #[test]
43 fn test_is_valid() {
44 assert_eq!(is_valid("1"), true);
45 assert_eq!(is_valid("C:/测试"), true);
46 assert_eq!(is_valid("C:/test"), true);
47 assert_eq!(is_valid("X:/x/y/z"), true);
48 assert_eq!(is_valid(r"C:/te|st"), false);
49 }
50}