2013-08-29 111 views
3

我此行我的代碼:如何檢查文件擴展名是大寫還是小寫?

if (address.EndsWith("GIF") || (address.EndsWith("BMP") || address.EndsWith("JPEG") || address.EndsWith("TIFF") || address.EndsWith("RAW") || address.EndsWith("PNG"))) 

再舉例來說,現在的地址變量的網站地址是:www.test.jpg 那麼它永遠不會在IF獲取和跳出/繼續。

我希望它的所有擴展名都是大寫和小寫,例如「GIF」和「gif」 我該怎麼辦?

(子問題,如果我要檢查的文件擴展名做的endsWith(「GIF」是足或我收到添加一個點狀符「.gif」或類似「.JPEG」?)

回答

9

與迄今爲止的其他答案不同,我可能堅持使用EndsWith,但切換到接受StringComparison參數的overload,例如,:

address.EndsWith("GIF",StringComparison.OrdinalIgnoreCase) 

通常你應該避免使用ToLowerToUpper只是爲了能夠進行比較,因爲在框架中最字符串比較設施提供某種形式的選項,使您可以執行,而忽略大小寫的比較。

+0

不錯,忘了這個 – Sayse

3

你根本不需要

address.ToLower().EndsWith("gif") 

,如果你真的需要

bool lowercase = address.ToLower() == address 

你可以清理你的代碼太 - 我相信你應該將達米安的答案納入其中,但不希望從應有的地方獲得信貸。

var extensions = new string[]{"gif","jpg","something"}; 
if(extensions.Any(x => address.ToLower().EndsWith(x))) 
+0

第一個==需要= = – misha

+1

@misha - 歡呼,清晨! – Sayse

1

使用Path.GetExtension方法獲取擴展名。

返回指定路徑字符串的擴展名。

string ext = Path.GetExtension(address); 

然後檢查所有字符的擴展名是大寫還是不行。

public static bool IsAllCharLowerCase(string ext) 
{ 
    foreach(char c in ext) 
    { 
     if (char.IsUpper(c)) 
     { 
      return false; 
     } 
    } 
    return true; 
} 
+0

關於你的支票 - 只有在所有的字符都是小寫字母的情況下,這不應該是真的嗎? – Vadim

+0

@Vadim你是對的。更新。謝謝。 –

3

對於小寫字母,您應該轉換爲較低字母,然後匹配結尾。

做這樣的

string temp = address.ToLower(); 
if (temp .EndsWith(".gif") || (temp .EndsWith(".bmp") || temp .EndsWith(".jpeg") || temp .EndsWith(".tiff") || temp .EndsWith(".raw") || temp .EndsWith(".png"))) 

爲您subquestion

您需要在擴展添加.。因爲否則您的地址www.testgif將被視爲有效地址。

+0

在你的例子中沒有人例如「.gif」的所有擴展名已經是小寫,而temp也是小寫,如果例如地址以「.GIF」大寫結束,那麼在這種情況下會發生什麼? – DanielVest

+0

我首先將地址轉換爲較低。該檢查不會繞過它。因爲GIF將首先轉換爲gif,然後進行匹配。並且incase你想在將來使用地址我已經創建了一個副本臨時使用它之前。 – Ehsan

0

只要改變所有擴展到大寫評估之前,像這樣

address.ToUpper().EndsWith("GIF") etc. 

與點檢查如「.GIF」會給你更多的保證,它實際上是一個擴展,而不是以GIF結尾的擴展少文件。

相關問題