すべてのタイプのポートに対して次のようなクレイジーなサイクルを実行することは別として:
bool IsGoodFileName(string file_name)
{
for (int i = 0; i < 256; i++)
if (string.Compare(file_name, "COM" + i) == 0)
return false;
return true;
}
documentationによると、これらについてポート 9 を超えてチェックする必要はないため、次のようにすることができます。
static bool IsGoodFileName(string file_name)
{
var reserved = new[]
{
"CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9",
"LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9"
};
var fileName = Path.GetFileNameWithoutExtension(file_name);
//TODO: handle case where fileName is null.
return !reserved.Any(r => fileName.Equals(r, StringComparison.InvariantCultureIgnoreCase));
}
実際、Windows Explorer では COM20 という名前のファイルを作成できるので、それらを確認する必要はないと思います。