c# - 保存文件对话框,限制名称

标签 c# csv savefiledialog

我的程序有一个保存文件选项,如下所示:

        //Browse for file
        SaveFileDialog ofd = new SaveFileDialog();
        ofd.Filter = "CSV|*.csv";
        ofd.DefaultExt = ".csv";

        DialogResult result = ofd.ShowDialog();
        string converted = result.ToString();

        if (converted == "OK")
        {
            Master_Inventory_Export_savePath.Text = ofd.FileName;
        }

如果我将文件名写为“example”,它会正确保存为 .csv 但是,如果我将名称设置为“example.txt”,它会另存为文本文件,我查看了 msdn 等,但甚至设置了默认扩展名不会阻止这种情况,关于如何只允许保存 .csv 文件的任何想法?

最佳答案

您可以使用 FileOk事件来检查您的用户键入的内容,如果键入您不喜欢的内容,则拒绝输入。

例如:

SaveFileDialog sdlg = new SaveFileDialog();
sdlg.FileOk += CheckIfFileHasCorrectExtension;
sdlg.Filter = "CSV Files (*.csv)|*.csv";
if(sdlg.ShowDialog() == DialogResult.OK)
    Console.WriteLine("Save file:" + sdlg.FileName);

 void CheckIfFileHasCorrectExtension(object sender, CancelEventArgs e)
 {
     SaveFileDialog sv = (sender as SaveFileDialog);
     if(Path.GetExtension(sv.FileName).ToLower() != ".csv")
     {
         e.Cancel = true;
         MessageBox.Show("Please omit the extension or use 'CSV'");
         return;
     }
 }

这种方法的主要优点是您的 SaveFileDialog 不会被关闭,如果出现问题,您可以在不重新加载 SaveFileDialog 的情况下检查输入。

注意 如果 SaveFileDialog 无法识别您的用户键入的扩展名,它会自动附加您的扩展名。这意味着如果您的用户键入 somefile.doc,则 SaveFileDialog 不会附加 .CSV 扩展名,因为 .DOC 扩展名在操作系统中可能是众所周知的。但是,如果您的用户键入 somefile.zxc,那么您会收到一个名为 somefile.zxc.csv 的文件名作为输出(也在 FileOk 事件中)

关于c# - 保存文件对话框,限制名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18743750/

相关文章:

c# - 如何防止 SaveFileDialog 提示两次以替换/覆盖文件?

javascript - 使用 C# 在控制台应用程序中加载网页内容

java - Android 和 C# 应用程序之间的连接

c# - 删除转义序列不起作用

c# - 从 csv 文件结构生成 c# 模型类

csv - Octave:以 csv 格式导入大矩阵

windows-7 - Notepad++替换 "Save"通用文件对话框

c# - .Net 添加索引到数据表(数据集)

python - 如何使用 Python 将一个 CSV 中的行复制到另一个 CSV 文件

java - 插件开发: create new file dialog using FileDialog