1. ホーム
  2. c#

[解決済み] Path.GetDirectoryNameはどのように動作しますか?

2022-02-27 06:19:39

質問

を使用する場合 OpenFileDialog でファイルを開く場合、当然ながらファイル ディレクトリ とその 名前 をクリックしてファイルをロードします(xmlをロードするには、ファイルにアクセスするためにフルパスが必要です。)。

opd OpenFileDialog

        if (opd.ShowDialog() == true)
        {
            var names = opd.FileNames;

            foreach (string name in names)
            {
                LoadFile(Path.Combine(Path.GetDirectoryName(name), name));
            }
        }

私の質問は、どのように Path.GetDirectoryName 文字列を取るだけでファイルのパスを取得できますか?

Path.GetDirectoryName(name)

name は、ただ string コンピュータの中には同じ名前のファイルが何千個もあるわけで、そのディレクトリを取得するのでしょうか?

ShortQuestion: はどこですか? opd 参照 ?

編集する

と思った opd.FileNames だけで 名前 メソッド名のため)。

また、面白いことを発見しました。

LoadFile(Path.Combine(Path.GetDirectoryName(name), name));

これは正常に動作します。 Path.Combine は、文字列の同じ部分をスキップするだけです。

string name = @"C:\Users\Default\xml.xml";
string getDirNameResault= Path.GetDirectoryName(name);// this will be C:\Users\Default

したがって、Path.Combineは次のようになります。

 Path.Combine(@"C:\Users\Default", @"C:\Users\Default\xml.xml)

魔女返し "C:\Users\Default\xml.xml" !

解決方法は?

<ブロッククオート

名前は単なる文字列であり、このメソッドは文字列を取るだけでそのディレクトリを取得しますか? コンピュータ内に同じ名前のファイルが何千もある可能性があります。

name にはフルパスが含まれます。 Path.GetDirectoryName() は、最後のディレクトリ区切り文字以降をすべて取り除くだけです。 Path.Combine(Path.GetDirectoryName(name), name) は何の役にも立ちません。 :

path2 がルートを含む場合、path2 が返されます。

を使うだけです。 name を直接指定します。