2019年06月24日
川俣晶の縁側ソフトウェア技術雑記 total 3188 count

Path.GetDirectoryNameの研究

Written By: 川俣 晶連絡先

問題 §

 Path.GetDirectoryNameがnullを返したり長さ0の文字列を返したり予想もしない挙動を示すことがあって悩む。

原因 §

 仕様。

対策 §

 以下のテストプログラムの結果を参考に面倒臭い使い方はできるだけしない。

テストプログラム(.NET Framework 4.7.2) §

using System;

using System.IO;

class Program

{

    static void sub(string path)

    {

        Console.Write($"Path.GetDirectoryName(\"{path}\") => ");

        var d = Path.GetDirectoryName(path);

        if (d == null) Console.WriteLine("null");

        else if (d.Length == 0) Console.WriteLine("zero length string");

        else Console.WriteLine(d);

    }

    static void Main()

    {

        sub(@"a:\x.txt");

        sub(@"a\x.txt");

        sub(@"\x.txt");

        sub(@"x.txt");

        sub(@"a:\");

        sub(@"a:");

        sub(@"\\.\device");

        sub(@"\\.\device\test.txt");

        sub(@"\\host\share");

        sub(@"\\host\share\test.txt");

    }

}

実行結果 §

Path.GetDirectoryName("a:\x.txt") => a:\

Path.GetDirectoryName("a\x.txt") => a

Path.GetDirectoryName("\x.txt") => \

Path.GetDirectoryName("x.txt") => zero length string

Path.GetDirectoryName("a:\") => null

Path.GetDirectoryName("a:") => null

Path.GetDirectoryName("\\.\device") => null

Path.GetDirectoryName("\\.\device\test.txt") => \\.\device

Path.GetDirectoryName("\\host\share") => null

Path.GetDirectoryName("\\host\share\test.txt") => \\host\share