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

C# 如何在使用“保存文件”对话框保存文件时输入的无效文件名上显示消息框,c#,winforms,C#,Winforms,您好,我已经编写了一个代码,如果在保存文件时输入了无效字符,但我的消息框未显示,则显示消息框。实际上,如果文件名开始或包含以下内容,我将有一个保存文件对话框选项来保存文件 \\/:*?<>|" \\/:*?|” 我想在文件中将消息框显示为无效或非法字符 我的代码如下 Stream myStream; SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialo

您好,我已经编写了一个代码,如果在保存文件时输入了无效字符,但我的消息框未显示,则显示消息框。实际上,如果文件名开始或包含以下内容,我将有一个保存文件对话框选项来保存文件

             \\/:*?<>|"
\\/:*?|”
我想在文件中将消息框显示为无效或非法字符

我的代码如下

  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);
      }
streammystream;
SaveFileDialog saveFileDialog1=新建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(文件名)))
{
Show(“文件名不应包含\\/:*?|“,”,MessageBoxButtons.OK,MessageBoxIcon.Error);
}
其他的
{
if((myStream=saveFileDialog1.OpenFile())!=null)
{
//FileName=saveFileDialog1.FileName;
如果(!(FilePathHasInvalidChars(文件名)))
{
TreeNode newNode=新的TreeNode(文件名);
newNode.SelectedImageIndex=1;
tvwACH.SelectedNode.Nodes.Add(新建节点);
TreeNodeNodeFileHeader=newNode.Nodes.Add(“文件头”);
myStream.Close();
}
}
}
}
公共静态bool文件路径hasvalidchars(字符串路径)
{
返回(!string.IsNullOrEmpty(path)和&path.IndexOfAny(System.IO.path.GetInvalidPathChars())>=0);
}

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


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

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


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

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


如果您正在讨论使用自定义错误消息处理程序来显示自定义消息,则需要通过对SaveFileDialog进行子分类并截取此类的windows过程消息来覆盖该对话框。请参阅本文,其中介绍了如何执行该操作。

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


如果您正在谈论使用自定义错误消息处理程序来显示自定义消息,则需要通过对SaveFileDialog进行子分类并截取此类的windows过程消息来覆盖它。请参阅本文,其中介绍了如何执行此操作。

这是因为FileDialog已在himsel上执行此检查f


如果您尝试在文件名中使用
,则会收到错误消息。如果您尝试使用类似
*
的搜索模式,则列表视图将针对给定模式进行筛选。

这是因为文件对话框本身已经进行了此检查


如果您尝试在文件名中使用
,您会收到一条错误消息。如果您尝试使用类似
*
的搜索模式,列表视图将针对给定的模式进行筛选。

您的代码有什么问题?如果输入某种类型的文件名作为?或?a并单击“保存”,我将无法显示我需要的消息框您的代码有什么问题?如果输入某种文件名作为?或?a,然后单击“保存”,我无法显示我需要的消息框。但是如何显示我自己的消息而不是默认消息。@Dorababu:如果您将
ValidateNames
设置为
fals,那么示例中的代码可能会工作e
显示对话框之前。虽然我无法显示我需要的mesage框,但我如何显示我自己的消息而不是默认消息。@Dorababu:如果在显示对话框之前将
ValidateNames
设置为
false
,那么示例中的代码可能会工作。即使我无法显示我需要的台面盒