SaveFileDialog 上的自定义检查文件名

Posted

技术标签:

【中文标题】SaveFileDialog 上的自定义检查文件名【英文标题】:Custom checking file name on SaveFileDialog 【发布时间】:2014-09-21 04:49:32 【问题描述】:

我有一个SaveFileDialog

当用户点击确定时,我必须检查是否有类似的文件名。

系统一直在做这样的测试,但是我需要添加一个测试是否有一个名称和编号相似的文件。

例如,如果用户选择了文件名“a”并且存在文件“a1”或“a2”,则应显示警告消息。 (当有一个名为“a”的文件时出现)。

有没有办法做到这一点?

【问题讨论】:

在这种情况下不要使用 SaveFileDialog。使用您自己创建的控件为此创建自定义逻辑。 a & a1 & a2 是否在同一路径中? @MehdiKhademloo,是的。 文件扩展名相同?只是约束是在文件名末尾添加数字 它有一个简单的方法,请稍等一下...... 【参考方案1】:

SaveFileDialog 继承 FileDialog 具有 FileOk 事件的类。您可以放置​​逻辑来检查类似文件是否已存在于此事件的处理程序方法中。如果结果为true,则显示警告消息。然后如果用户从警告对话框中选择No,将CancelEventArgs 参数的Cancel 属性设置为True,这将阻止保存文件对话框窗口关闭:

var dlg = new SaveFileDialog();
dlg.FileOk += (o, args) =>
              
                  var file = dlg.FileName;
                  if (isSimilarFileExist(file))
                  
                      var result = MessageBox.Show("Similar file names exist in the same folder. Do you want to continue?", 
                                                    "Some dialog title", 
                                                    MessageBoxButtons.YesNo, 
                                                    MessageBoxIcon.Warning
                                                  );
                      if(result == DialogResult.No)
                        args.Cancel = true;
                  
              ;
dlg.ShowDialog();

......

private bool isSimilarFileExist(string file)

    //put your logic here

【讨论】:

【参考方案2】:

这就是你想要的答案

SaveFileDialog S = new SaveFileDialog();
if(S.ShowDialog() == DialogResult.OK)

    bool ShowWarning = false;
    string DirPath = System.IO.Path.GetDirectoryName(S.FileName);
    string[] Files = System.IO.Directory.GetFiles(DirPath);
    string NOFWE = DirPath+"\\"+System.IO.Path.GetFileNameWithoutExtension(S.FileName);
    foreach (var item in Files)
    

        if (item.Length > NOFWE.Length && item.Substring(0, NOFWE.Length) == NOFWE)
        
            int n;
            string Extension = System.IO.Path.GetExtension(item);
            string RemainString = item.Substring(NOFWE.Length, item.Length - Extension.Length - NOFWE.Length);
            bool isNumeric = int.TryParse(RemainString, out n);
            if(isNumeric)
            
                ShowWarning = true;
                break;
            

        
    
    if(ShowWarning)
    
        if (MessageBox.Show("Warning alert!", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
            Save();//Saving instance
    
    else
    
        Save();//Saving instance
    

ans Save() 方法是保存说明...

【讨论】:

以上是关于SaveFileDialog 上的自定义检查文件名的主要内容,如果未能解决你的问题,请参考以下文章

Silverlight SaveFileDialog - 设置默认文件名

实体模型上的自定义吸气剂?

GravityForms 上的自定义输入名称

检查下载中的自定义文件夹中是不是存在文件 - 不推荐使用 getExternalStoragePublicDirectory

录制红色状态栏上的自定义文本

Winform SaveFileDialog 通过一个php脚本使用