2015-05-15 55 views
-1

我想解決這個錯誤,當沒有選擇文件時,程序顯然會去做下一步,儘管它不應該。我曾嘗試過:C#OpenFileDialog - 當沒有選擇文件時出現異常

if (fileToCheck != null) 

但它沒有工作。還有其他建議嗎?

private void Mail(object sender, RoutedEventArgs e) 
{ 
    OpenFileDialog openFileDialog = new OpenFileDialog(); 
    openFileDialog.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*"; 

    if (openFileDialog.ShowDialog() == true) 
    { 
      spamText.Text = File.ReadAllText(openFileDialog.FileName);    
    } 


    string[] fileToCheck = { openFileDialog.FileName }; 

    Splitter(fileToCheck); 
    mail = tempDict; 
} 
+2

什麼您_didn't WORK_意思?你在說什麼異常? –

+0

告訴我們哪一行拋出異常很重要。這不是'spamText.Text'這行。它不能是'fileToCheck'行......可以用一個空字符串來創建一個數組。 Splitter()函數裏面有什麼? –

+0

該代碼如何編譯? 'ShowDialog'不返回一個布爾值。請提供實際編寫的代碼。 –

回答

2

你是在正確的軌道上。

但檢查if (fileToCheck != null)是不夠的,因爲當沒有選擇文件時,openFileDialog.FileName包含空字符串,不爲空。

所以你可以使用if (!String.IsNullOrEmpty(fileToCheck))檢查。

另一種方式 - 只需將代碼放在fileToCheck左右,這個代碼就在openFileDialog.ShowDialog() == true之內。它看起來更合乎邏輯,因爲如果文件沒有被選中,這個條件將不會被打中,你不需要進行額外的檢查。

所以,你的代碼可能看起來像

if (openFileDialog.ShowDialog() == true) 
{ 
    string fileName = openFileDialog.FileName; 
    if (!string.IsNullOrEmpty(fileName) && File.Exists(fileName)) 
    { 
     spamText.Text = File.ReadAllText(fileName);    
     Splitter(new [] {fileName}); 
    } 
} 
+2

更好的辦法是調用'File.Exists(fileToCheck)' –

+0

如果我將它放在if語句中,是否應該包含&& openFileDialog.FileName.Trim()!= string.Empty'? –

+1

只需使用'string.IsNullOrWhiteSpace()' – imlokesh

1

您需要檢查是否FileName不是空的,你打電話之前Splitter。您可以使用String.IsNullOrWhiteSpace在Splitter中,您可以使用File.Exists找出文件是否存在。

if(!String.IsNullOrWhiteSpace(fileToCheck)) 
{ 
    string[] fileToCheck = { openFileDialog.FileName }; 
    Splitter(fileToCheck); 
    mail = tempDict; 
} 
else 
{ 
    //Do something 
} 
相關問題