如何在使用“保存文件”对话框保存文件时输入的无效文件名上显示消息框

时间:2010-09-13 10:31:13

标签: c# winforms

大家好我编写了一个代码来显示一个消息框,如果在保存文件时输入了无效字符,但我的消息框没有显示。实际上,如果文件名开始或由以下

组成,我将有一个保存文件对话框选项来保存文件
             \\/:*?<>|"

我想在文件

中显示一个消息框作为无效或非法字符

我的代码如下

  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);
      }

任何人都可以帮助我

3 个答案:

答案 0 :(得分:1)

SaveFileDialog类有一个名为ValidateNames的属性。该属性的值为true(默认情况下,无需分配),对话框将自动验证用户输入的名称是否包含任何非法字符。如果用户输入非法文件名并单击“保存”按钮,则对话框不会关闭,而是显示错误消息: alt text

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

答案 1 :(得分:1)

根据此MSDN,在ValidateNames实例中将属性saveFileDialog1设置为true。在“SaveFileDialog”类的运行时实例化中,默认设置为true。

如果您正在讨论使用自定义错误消息处理程序来显示自定义消息,则需要通过对其进行子类化并拦截此类的Windows过程消息来覆盖SaveFileDialog。请查看CodeProject上的这篇文章,其中介绍了如何执行此操作。

答案 2 :(得分:1)

这是因为FileDialog已经对自己进行了检查。

如果您尝试在文件名中使用<>,则会收到错误消息。如果您尝试使用?*等搜索模式,则会针对给定模式过滤ListView。