3

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

        //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 文件的任何想法?

4

3 回答 3

7

您可以使用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作为输出(以及在事件中)FileOksomefile.zxc.csv

于 2013-09-11T14:29:09.423 回答
1

你能不能在最后一段代码中像这样强制 .csv 文件类型?

if (converted == "OK")
{
    if (ofd.FileName.toString.EndsWith(".csv")<1)
    {
     Master_Inventory_Export_savePath.Text = ofd.FileName + ".csv";
    }
    else
    {
    Master_Inventory_Export_savePath.Text = ofd.FileName;
    }
}

注意 - 未经测试,但应该给你一个起点......

于 2013-09-11T14:25:17.797 回答
-1

将属性设置AddExtensiontrue

ofd.AddExtension = true;
于 2013-09-11T14:24:58.937 回答