2016-12-20 3 views
1

私はRustの相対パスを正規化して解決しようとしていた個人的なプロジェクトに取り組んでいます。しかし、私がそうする度に、新しいパスには、奇妙な\\?\シーケンスの接頭辞が付けられます。例えば、のような単純なもの:私の正規化されたパスの先頭に\?

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

は、次のような出力になります:

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

私は他の方法でしようよ何を達成することができますので、これは特に問題ではありません。しかし、奇妙な動作のように思えます。特に、パスの文字列形式を何らかの方法で使用して精度を必要とする場合は特にそうです。結果の前に文字列があるのはなぜですか?それを避けるにはどうしたらいいですか?

答えて

8

The \\?\ prefix、すなわち、それは...の特別な意味を無効にし、CONような特殊なデバイス名は解釈されず、パスが絶対的であると仮定されているようにパスを治療するために、Windowsに指示します。 up to 32,767 characters (UTF-16 code units), whereas otherwise the limit is 260パスを使用することもできます(Windows 10、バージョン1607以降、アプリケーションで長いパスを使用している場合を除く)。

したがって、接頭辞\\?\は、使用可能なパスを確保します。その接頭辞を削除すると、使用できないパスや別のファイルに解決されるパスが生成される可能性があります。そのように、私はあなたのパスに接頭辞を維持することをお勧めします

関連する問題