2

我正在尝试使用 SaveFileDialog 保存文档。过滤器应允许用户将文档另存为 .doc 或 .docx,但如果用户将文件名输入为“Test.txt”,则该文件将保存为 Test.txt 而不是 Test.txt.doc

如何防止文件的类型转换并让用户只保存 .doc 或 .docx 文件?如果用户没有自己选择 2 个扩展名之一,则应始终另存为 .doc。

我当前的代码如下所示:

SaveFileDialog sfd = new SaveFileDialog();
string savepath = "";
sfd.Filter = "Wordfile (*.doc;*.docx;)|*.doc;*.docx)";
sfd.DefaultExt = ".doc";
sfd.SupportMultiDottedExtensions = true;
sfd.OverwritePrompt = true;
sfd.AddExtension = true;
sfd.ShowDialog();

//Save the document
doc.SaveAs(sfd.FileName, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

我可以做一个 if 并询问 sfd.FileName 是否以 .doc 或 .docx 结尾,但这有点复杂,并且使 SaveFileDialog 的过滤器完全没用......

当我输入文件名“Test”时,输出将是 Test.doc,当我输入“Test.txt”时,输出将是“Test.txt”

编辑:伊利亚斯的回答有点正确。它与 .txt 作为扩展名一起使用,但当我只键入“Test”或“Test.doc”作为文件名时则不行,因为它总是将文件保存为“Test.doc.doc”。我目前的解决方案:

//.....
sfd.ShowDialog();
if (!sfd.FileName.EndsWith(".doc") && !sfd.FileName.EndsWith(".docx"))
    sfd.FileName += ".doc";

编辑:可以在 Ilyas 答案或我对 Ilyas 答案的评论中找到解决方案。

4

1 回答 1

1
var sfd = new SaveFileDialog();
sfd.Filter = "Worddatei (*.doc;*.docx;)|*.doc;*.docx)";

Func<string, bool> isGoodExtension = path => new[]{".doc", ".docx"}.Contains(Path.GetExtension(path));

sfd.FileOk += (s, arg) => sfd.FileName += isGoodExtension(sfd.FileName) ? "" : ".doc";

sfd.ShowDialog();

//Save the document
Console.WriteLine (sfd.FileName);

1.txt.doc如果输入,则打印1.txt。随意提取检查或附加到另一个方法的逻辑,以使代码更具可读性

于 2013-05-29T09:31:04.127 回答