2011-07-06 6 views
2

"C:\ foo \。\ bar \ .."のようなパスがある場合は、Win32 APIを使用してディレクトリ修飾子を削除して "C:\ foo"に簡略化する簡単な方法はありますか?Win32 APIを使用してパス名を簡略化するために、ディレクトリ修飾子を削除するにはどうすればよいですか?


更新:これはもっと複雑な問題です。この単純な "C:\ foo \。\ bar \ .."の例では、PathCanonicalize()とGetFullPathName()の両方で動作し、結果として "C:\ foo"を取得します。

しかし、私が通過しているパスにはシンボリックリンクがあります。 C:\ NaNa \ Boo \ Bin \ .. "と" C:\ NaNa "が" D:\ Apple "へのリンクであるとしましょう。私は "C:\ NaNa \ Boo \ Bin \ .."を取得します。 "C:\ NaNa \ Boo"よりも背後の格付けがあります

私は関数が文字列だけで動作すると仮定しますが、 !私が渡され、これが正常に動作機能を維持した文字列内の改行文字(0x0Dが)を持っていた表示されます

+1

私はGetFullPathName()を投稿した人にお詫び申し上げます。私がコメントしたときの答えはうまくいかなかった(彼らは彼らの反応を引き出した)。実際には正しくフォーマットされた文字列で動作します。少なくとも私はdownvotingよりむしろコメントしましたが、私はまだ謝罪が正当だと感じます。 – Adisak

答えて

7

ください:更新#2が


:-(シンボリックリンクshlwapiのを見てくださいPathCanonicalize()

+0

なんらかの理由で、私のマシン(Windows 7)で、PathCanonicalize()が末尾の ".."を削除していない - 好奇心が強いのはドキュメントだからです。 – Adisak

+0

奇妙な、私のために働くxp、 'buffer_5 []'例@ msdnは後ろに..剥ぎ取られていることを示している –

+0

うーん、それは "c:\ foo \。\ bar \ .."私の本当の長いディレクトリ名のために働くこと。 – Adisak

関連する問題