【C#】Windowsで使用できるファイル名かチェックする

C# で Windows 上で使用できるファイル名かどうかをチェックする実装です。

using System.IO;
using System.Text.RegularExpressions;

public class WindowsFileSystem
{
    // 使用禁止文字
    static readonly char[] invalidChars = Path.GetInvalidFileNameChars();

    // 指定したファイルパスが使用できるかどうか?
    // true: 使える / false: 使えない
    public bool CanUseFilePath(string path)
    {
        if (string.IsNullOrWhiteSpace(path)) return false;

        // 推定ファイル名の部分を取得する
        int index = path.LastIndexOf('\\');
        string word = index == -1 ? path : path.Substring(index + 1, path.Length - index - 1);
        return CanUseFileName(word);
    }

    // 指定した文字列がファイル名 or フォルダ名に使用できるかどうか?
    // true: 使える / false: 使えない
    public bool CanUseFileName(string name)
    {
        if (string.IsNullOrWhiteSpace(name)) return false;

        // 拡張子より前を選択
        int index = name.IndexOf('.');
        string target = index == -1 ? name : name.Substring(0, index);

        // 対象に不正な文字が含まれているか?
        foreach (char c in target)
        {
            foreach (var p in invalidChars)
            {
                if (c == p) return false;
            }
        }

        // 予約語が含まれていないか?
        return !Regex.IsMatch(target,
            @"^((COM|LPT)[1-9]|CON|PRN|AUX|NUL)$", RegexOptions.IgnoreCase);
    }
}

長さについてはチェックしていません。

このクラスの使い方は以下の通りです。

private static void Main(string[] args)
{
    WindowsFileSystem windows = new();
    bool isOK = windows.CanUseFilePath(@"d:\hoge\sample.txt");
    if (isOK)
    {
        // 使える
    }
    else
    {
        // 使えない
    }
}