2017-01-11 1 views
0

Path을 읽고 DirEntry 인스턴스를 반환하는 함수를 작성했습니다. 내가 이해하지 못하는 이상한 행동이있어. 귀하의 예제 코드에서녹에서 이상한 경로 동작을 알아낼 수 없습니다.

Full code on the Rust playground

+0

오른쪽하지만 오류가 제거 라인 (32) 및 추가 설명 후 라인 31 – Interaction

+0

던져, https://play.rust-lang.org/?gist=fa07e627043890122ca31fba9b31a96c&version=stable&backtrace=0 – Interaction

+0

난에 새 링크를 포함 질문. – ljedrz

답변

0

pub fn file_to_direntry<T: AsRef<Path>>(filepath: T) -> Result<DirEntry, Box<Error>> { 
    match filepath.has_parent() { 
     Some(parent) => { 
      //.. 
     } 
     // has no parent 
     // this line would cause an error 
     // Err(Error { repr: Os { code: 2, message: "No such file or directory" } }) 
     None => path_to_entry(Path::new("."), path), 
    } 
} 


fn path_to_entry<A: AsRef<Path>, B: AsRef<Path>>(path: A, filename: B) -> Result<DirEntry, Box<Error>> { 
    let filename: &Path = filename.as_ref(); 
    let path: &Path = path.as_ref(); 

    // this line prints, "" "." 
    println!("{:?} {:?}", path, PathBuf::from(".")); 

    // when I replace this line to 
    // for entry in try!(read_dir(PathBuf::from("."))) 
    // it works perfectly fine 

    for entry in try!(read_dir(path)) { 
     println!("{:?}", try!(entry)); 
    } 
    Err(From::from("no file found")) 
} 
, 당신은 PathBuf::from("todos.txt")로 테스트합니다. 이것은 상대적 경로이며, 시작은 / 또는 c:\은 포함되지 않습니다.

let parent = pf.parent();을 입력하면 Some("")가 반환됩니다. 따라서 부모는 빈 문자열이며 Some(".")이 아니며 None도 아닙니다. parent은 경로가 루트 또는 접두어로 끝나는 경우에만 None을 반환합니다. 위의 예에서는 None 부분 만 포함되었지만 호출되지는 않습니다.

read_dir은 제공된 경로가없는 경우 오류를 반환합니다. 이는 read_dir(PathBuf::from(""))과 같이 빈 문자열을 전달할 경우에 해당하지만 read_dir(PathBuf::from("."))을 사용하면 완벽하게 작동합니다.

+0

고마워요! 왜 PathBuf :: from (". \ todos.txt")'대신''PathBuf :: from ("todos.txt")'가 잘 작동하는지 궁금합니다. 나에게 나는이 두 가지는 똑같이해야한다고 생각한다. 나는 무엇을 놓치거나 오해 하는가? – Interaction

+0

나는'. \ todos.txt'와'todos.txt'를 동일하게 취급하는 것에 동의합니다. 그러나 현재 문서를 [std :: path] (https://doc.rust-lang.org/std/path/)에서 읽는다면 그렇지 않습니다. 정규화가 일어나지 만,''. "'을 추가하는 것은 그 중 하나가 아닙니다. 그러나 이것은 미래에 변경 될 수 있습니다. – wimh

+0

글쎄, 나는'. \ xx'를 더 잘 붙이려한다. :) – Interaction