2012-07-30 52 views
3

可能重複:
How check if given string is legal (allowed) file name under Windows?驗證文件名在C#

我是新來的StackOverflow。我知道這是一個愚蠢的問題,但我陷入了困境。我想驗證一個文件名,以便它只應該接受合法的路徑。我曾嘗試下面的代碼:

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

它的工作,但是,我是一個有點困惑是否會完全工作或沒有,所以我想知道其他的答案了。我認爲我們也可以使用正則表達式驗證文件名。任何幫助都會很棒。

+0

它不工作,因爲它接受:::作爲characters..and它說,爲有效的文件名 – Yash 2012-07-30 10:29:44

回答

2

這將按預期工作。

有沒有必要發明一個正則表達式來做到這一點,就好像無效字符的集合改變了你的代碼將會過時一樣,而這個調用仍然會按預期工作。

0

這取決於你在做什麼。 如果它只是一個文件名你正在驗證,那麼這將工作。框架函數將檢查特定操作系統的無效文件名字符,並將隨着.NET框架一起更新。而你的正則表達式不會。

雖然,如果你想檢查它是否是有效的路徑,那麼還有一些你必須做的我猜。像它是一個有效的驅動器號,路徑,文件夾等。

1

這是正確的方法。將來,如果您的程序將被移植到不同的操作系統,它將繼續工作。手工製作的解決方案效果不佳。

1

試試這個:

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

if (!bOk) 
{ 
    // ... 
} 
else 
{ 
    // ... 
}