在multidotExtension上意外添加了SaveFileDialog扩展

时间:2015-06-10 05:20:56

标签: c# .net winforms savefiledialog

我的保存文件对话框有问题。在我更改文件对话框中的save as type之前,保存文件对话框看起来很好。它总是添加已存在的扩展名。我需要有多点扩展。

因此,如果我更改save as type,则保存文件对话框将使文件名变为D:\Temp\Test.dt.dt.dt.dt.dt.dt.txt 切换.dt

时,如何使文件save as type未添加

这是一个Windows bug吗?我使用的是winform和.net3.5 以下是我重现它的方法:

public partial class Form1 : Form
{
  public Form1()
  {
    InitializeComponent();
  }

  private void button1_Click( object sender, EventArgs e )
  {
    SaveFileDialog saveFileDialog1 = new SaveFileDialog
                             {
                               Title = "Save list file",
                               Filter =  "Text Files (*.dt.txt)|*.dt.txt|Microsoft Excel Files (*.dt.xls)|*.dt.xls|Microsoft Excel XML Files (*.dt.xlsx)|*.dt.xlsx",
                               DefaultExt = ".dt.txt",
                               OverwritePrompt = true,
                               SupportMultiDottedExtensions = true,
                               AddExtension = true
                             };
    saveFileDialog1.FileName = "D:\\Temp\\test.dt.txt";
    saveFileDialog1.ShowDialog();
  }
}

2 个答案:

答案 0 :(得分:2)

我认为问题出在FileDialog.cs:line877。 它调用string currentExtension = Path.GetExtension(fileName);来获取所选文件的当前扩展名,这里是Path.GetExtension(fileName);

的代码
// Returns the extension of the given path. The returned value includes the
// period (".") character of the extension except when you have a terminal period when you get String.Empty, such as ".exe" or
// ".cpp". The returned value is null if the given path is
// null or if the given path does not include an extension.
//
[Pure]
public static String GetExtension(String path) {
    if (path==null)
        return null;

    CheckInvalidPathChars(path);
    int length = path.Length;
    for (int i = length; --i >= 0;) {
        char ch = path[i];
        if (ch == '.')
        {
            if (i != length - 1)
                return path.Substring(i, length - i);
            else
                return String.Empty;
        }
        if (ch == DirectorySeparatorChar || ch == AltDirectorySeparatorChar || ch == VolumeSeparatorChar)
            break;
    }
    return String.Empty;
}

不支持多点扩展名。所以我认为这是一个错误。

答案 1 :(得分:0)

您无法添加双重扩展程序

文件扩展名应该在文件名中的最后一个.之后。

<强>解释

您的扩展程序为.dt.txt

在这种情况下,扩展名为.txt。它会将.dt视为文件名的一部分(这是重复.dt)和.txt作为扩展名的原因。