2016-12-20 8 views
1

저는 녹에서 상대 경로를 정규화하여 해결하려고 노력한 개인 프로젝트에서 작업하고 있습니다. 그러나 이렇게 할 때마다 새로운 경로 앞에 이상한 \\?\ 시퀀스가 ​​접두어로 붙습니다. 예를 들어, 뭔가 단순하게 :정규화 된 경로에 \가 붙는 이유는 무엇입니까?

\\?\C:\Users\[...]\rustprojects\projectname 

이 특정 문제는 내가 다른 방법으로 시도하고있는 무슨을 달성 할 수 있기 때문되지 않습니다 :

let p = fs::canonicalize(".").unwrap(); 
println!("{}", p.display()); 

결과는 다음과 같이 발생합니다 . 그러나 특히 경로의 문자열 형식을 정확도가 필요한 방식으로 사용하려는 경우에는 이상한 동작으로 보입니다. 이 문자 시퀀스가 ​​결과 앞에 왜 나타나는 이유는 무엇입니까? 어떻게 피할 수 있습니까? , 즉이 ...의 특별한 의미를 비활성화 CON 같은 특수 장치 이름은 해석되지 않고 경로가 절대로 가정으로

답변

8

The \\?\ prefix 경로를 치료하기 위해 윈도우를 알려줍니다. 또한 up to 32,767 characters (UTF-16 code units), whereas otherwise the limit is 260 경로를 사용할 수 있습니다 (Windows 10, 버전 1607 이상이고 응용 프로그램이 더 긴 경로를 선택하지 않은 경우).

따라서 접두어 \\?\은 사용 가능한 경로를 얻을 수 있도록합니다. 그 접두사를 제거하면 사용할 수 없거나 다른 파일로 해석되는 경로가 생길 수 있습니다! 따라서 은 귀하의 경로에 해당 접두사를 유지하는 것이 좋습니다.