2010-09-13 51 views
0

大家好我已經編寫了一個代碼來顯示一個消息框,如果在保存文件時輸入無效字符但我的消息框不顯示。事實上,我將有一個保存文件對話框,選擇保存,如果文件名開頭的文件或由以下部分組成如何在使用保存文件對話框保存文件時輸入無效文件名的消息框

   \\/:*?<>|" 

我想顯示一個消息框文件爲無效或illegalcharacters

我的代碼如下

Stream myStream; 
    SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 

    saveFileDialog1.InitialDirectory = @"C:\"; 
    saveFileDialog1.DefaultExt = "txt"; 
    saveFileDialog1.Filter = "(*.txt)|*.txt"; 
    saveFileDialog1.FilterIndex = 2; 
    saveFileDialog1.RestoreDirectory = true; 

if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
{ 
    FileName = saveFileDialog1.FileName; 
    if ((FilePathHasInvalidChars(FileName))) 
    { 
     MessageBox.Show("File name should not contain \\/:*?<>|" ,"", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    else 
    { 
     if ((myStream = saveFileDialog1.OpenFile()) != null) 
     { 

       //FileName = saveFileDialog1.FileName; 
       if (!(FilePathHasInvalidChars(FileName))) 
       { 
       TreeNode newNode = new TreeNode(FileName); 
       newNode.SelectedImageIndex = 1; 
       tvwACH.SelectedNode.Nodes.Add(newNode); 
       TreeNode NodeFileHeader = newNode.Nodes.Add("FileHeader"); 
       myStream.Close(); 
       } 

      } 
     } 

    } 

    public static bool FilePathHasInvalidChars(string path) 
    { 

     return (!string.IsNullOrEmpty(path) && path.IndexOfAny(System.IO.Path.GetInvalidPathChars()) >= 0); 
     } 

任何一個可以幫助我

+0

yoru代碼有什麼問題? – 2010-09-13 10:34:04

+0

如果輸入某種文件名作爲?或?a並點擊保存我無法顯示我需要的信息框 – Dotnet 2010-09-13 10:36:27

回答

1

SaveFileDialog類有一個叫做ValidateNames屬性。它的值是true(默認情況下,不需要分配它),對話框將自動驗證用戶輸入的名稱不包含任何非法字符。如果用戶輸入了非法的文件名,並點擊「保存」按鈕,對話框將不會關閉,而是顯示一個錯誤信息: alt text

(是的,我目前使用的是Windows XP)

+0

請問我能否清楚回答 – Dotnet 2010-09-13 10:37:08

+0

好的。但是,我怎麼能顯示我自己的消息,而不是默認的消息。 – Dotnet 2010-09-13 10:41:12

+0

@Dorababu:如果在顯示對話框之前將'ValidateNames'設置爲'false',那麼示例中的代碼應該可以工作。 – 2010-09-13 11:20:32

1

根據此MSDN,在saveFileDialog1實例中將屬性ValidateNames設置爲true。並且在'SaveFileDialog'類的運行時實例化時,它被設置爲默認爲true。

如果您正在討論定製錯誤消息處理程序來顯示自定義消息,則需要通過對它進行子分類並攔截該類的Windows過程消息來重寫SaveFileDialog。看看CodeProject這篇文章,它展示瞭如何去做。

1

這是因爲FileDialog自己已經檢查過了。

如果您嘗試在文件名中使用<>,您將收到錯誤消息。如果您嘗試使用?*之類的搜索模式,則將針對給定模式過濾ListView。