Windowsで正規のファイル名を解決するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1816691

  •  08-07-2019
  •  | 
  •  

質問

Windowsでファイルパスに解決される文字列がある場合、ファイル名の正規形式を取得する方法はありますか?

たとえば、次のことを知りたい

C:\stuff\things\etc\misc\whatever.txt

and

C:\stuff\things\etc\misc\other\..\whatever.txt

実際に同じファイルを指すかどうかを指定し、パスの正規形式をアプリケーションに保存します。

単純な文字列比較は機能せず、RegExマジックも機能しないことに注意してください。 Windows 2000以降の対処すべき NTFS再解析ポイントのようなものがあることに注意してください。 Windows 7。

役に立ちましたか?

解決

簡単な答え:そうでもない。

Windowsでファイルの正規名を取得する簡単な方法はありません。ローカルファイルは、再解析ポイント、SUBST経由で利用できます。 NTFSジャンクションに対処しますか? Windowsショートカット? \\?\ -escaped filenamesについてはどうですか

リモートファイルは、マップされたドライブ文字またはUNCを介して利用できます。オリジンサーバーへのUNCですか? DFSを使用していますか?サーバーは再解析ポイントなどを使用していますか?サーバーは複数の名前で利用できますか? IPアドレスはどうですか?複数のIPアドレスがありますか?

したがって、Windowsでiノード番号のようなものを探している場合、それはそこにありません。たとえば、このページをご覧ください。 。

他のヒント

ロジャーは正しいです、簡単な方法はありません。ボリュームがファイルの一意のファイルインデックスをサポートしている場合、ファイルを開いて GetFileInformationByHandle が、これはすべてのボリュームで機能しません。

Windows API呼び出し GetFullPathName 最高のシンプルなアプローチかもしれません。

GetFinalPathNameByHandle は、あなたが求めていることをしているように見えます、Windows Vista以降で利用可能です。

jheddingsにはいい答えがありますが、使用している言語を指定しなかったため、 os.path.abspath

> python -c "import os.path; print os.path.abspath('C:\stuff\things\etc\misc\other\..\whatever.txt')"
C:\stuff\things\etc\misc\whatever.txt

System.IO.Path.GetFullPathを使用します。入力として文字列(C:\ stuff \ things \ etc \ misc \ other .. \ whatever.txt)を受け取り、文字列(C:\ stuff \ things \ etc \ misc \ whatever.txtを出力します) )。

もう少し遅れていると思いますが、System.IO.Path.GetFullPath(" C:\ stuff \ things \ etc \ misc \ other .. \ whatever.txt")を使用すると、返されます" C:\ stuff \ things \ etc \ misc \ whatever.txt"

正規のパスを取得するには、 PathCanonicalize 関数。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top