Path
을 읽고 DirEntry
인스턴스를 반환하는 함수를 작성했습니다. 내가 이해하지 못하는 이상한 행동이있어. 귀하의 예제 코드에서녹에서 이상한 경로 동작을 알아낼 수 없습니다.
Full code on the Rust playground
Path
을 읽고 DirEntry
인스턴스를 반환하는 함수를 작성했습니다. 내가 이해하지 못하는 이상한 행동이있어. 귀하의 예제 코드에서녹에서 이상한 경로 동작을 알아낼 수 없습니다.
Full code on the Rust playground
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("."))
을 사용하면 완벽하게 작동합니다.
고마워요! 왜 PathBuf :: from (". \ todos.txt")'대신''PathBuf :: from ("todos.txt")'가 잘 작동하는지 궁금합니다. 나에게 나는이 두 가지는 똑같이해야한다고 생각한다. 나는 무엇을 놓치거나 오해 하는가? – Interaction
나는'. \ todos.txt'와'todos.txt'를 동일하게 취급하는 것에 동의합니다. 그러나 현재 문서를 [std :: path] (https://doc.rust-lang.org/std/path/)에서 읽는다면 그렇지 않습니다. 정규화가 일어나지 만,''. "'을 추가하는 것은 그 중 하나가 아닙니다. 그러나 이것은 미래에 변경 될 수 있습니다. – wimh
글쎄, 나는'. \ xx'를 더 잘 붙이려한다. :) – Interaction
오른쪽하지만 오류가 제거 라인 (32) 및 추가 설명 후 라인 31 – Interaction
던져, https://play.rust-lang.org/?gist=fa07e627043890122ca31fba9b31a96c&version=stable&backtrace=0 – Interaction
난에 새 링크를 포함 질문. – ljedrz