7

重複の可能性:
指定された文字列が Windows で有効な (許可されている) ファイル名であるかどうかを確認するにはどうすればよいですか?

私はスタックオーバーフローが初めてです。私はそれがばかげた質問であることを知っていますが、私はそれに行き詰まっています。正当なパスのみを受け入れるようにファイル名を検証したい。以下のコードを試しました:

if (txtFileName.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1) 
{   
   MessageBox.Show("The filename is invalid");   
   return; 
} 

うまくいきましたが、完全に機能するかどうか少し混乱していたので、他の答えも知りたいと思いました. 正規表現を使用してファイル名を検証することもできると思います。どんな助けでも素晴らしいでしょう。

4

4 に答える 4

3

これは期待どおりに機能します。

これを行うために正規表現を発明する必要はありません。無効な文字のセットが変更された場合、コードは古くなりますが、この呼び出しは引き続き期待どおりに機能します。

于 2012-07-30T08:08:05.420 に答える
1

それが正しい方法です。将来、プログラムが別のオペレーティング システムに移植されても、引き続き動作します。手作りのソリューションは効果が低くなります。

于 2012-07-30T08:09:31.997 に答える
1

これを試して:

bool bOk = false; 
try 
{ 
    new System.IO.FileInfo(fileName); 
    bOk = true; 
} 
catch (ArgumentException) 
{ 
} 
catch (System.IO.PathTooLongException) 
{ 
} 
catch (NotSupportedException) 
{ 
} 

if (!bOk) 
{ 
    // ... 
} 
else 
{ 
    // ... 
} 
于 2012-07-30T08:12:47.450 に答える
0

それはあなたが正確に何をしているかによって異なります。検証しているファイル名だけの場合、これは機能します。フレームワーク関数は、特定のオペレーティング システムの無効なファイル名文字をチェックし、.NET フレームワークと共に更新されます。あなたの正規表現はしませんが。

ただし、有効なパスかどうかを確認したい場合は、さらにやらなければならないことがあると思います。同様に、有効なドライブ文字、パス、フォルダーなどです。

于 2012-07-30T08:09:29.507 に答える