Directory.GetParent(@"C:\stuff"); //Returns C:\
Directory.GetParent(@"C:\stuff\"); //Returns C:\stuff
これはなぜ2つの異なる結果を返しますか?適切な使用法は何ですか?最初の例は正しい結果のようです。 MSDNからDirectory.GetParent()が後続のスラッシュを提供するときに同じディレクトリを返すのはなぜですか?
:
このメソッドで返される文字列は、最大パス内のすべての文字で構成されていますが、最後の
DirectorySeparatorChar
かAltDirectorySeparatorChar
含みません。たとえば、パス "C:\ Directory \ SubDirectory \ test.txt"をGetParentに渡すと、 "C:\ Directory \ SubDirectory"が返されます。 "C:\ Directory \ SubDirectory"を渡すと "C:\ Directory"が返されます。ただし、「C:¥Directory¥SubDirectory¥」は「C:¥Directory¥SubDirectory」を返します。これは、終了ディレクトリの区切り文字が「SubDirectory」の後にあるためです。
これは単純にディレクトリセパレータに基づいているようですが、私はそれがよりスマートにならない理由を考えることはできません。このように実装する理由はありますか?
以来それはドキュメントにあります、私は答えが 'それは彼らがそれを書いた方法だからです。' – Jonesopolis
'C:\ stuff \'が正しくフォーマットされたパスではないので、この方法で動作すると思います。 '\'はディレクトリSEPARATORを意味します。そのため、あなたはそのディレクトリの左右にディレクトリが存在することを意味します。使用可能な一方で文字列を終了するには、適切にフォーマットされたパスではないので、それを参照するメソッドと拡張は予期しない結果をもたらすために非難することはできません。 – Wobbles
内部的には 'Path.GetDirectoryName'に依存しています。あなたは馬鹿げて[最後のディレクトリ区切りを探します](http://referencesource.microsoft.com/#mscorlib/system/io/path.cs,206)。私は@Jonesopolisに同意します - 答えは "それがあるから"です。ここでの_proper_答えは、誰かがこのように設計した人の入力に依存します。それ以外の答えは、それがなぜそうであるかに関する誰かの意見です。 –