我的程序有一个保存文件选项,如下所示:
//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文件的想法?
答案 0 :(得分: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
,那么您会收到一个名为FileOk
somefile.zxc.csv
事件中)
答案 1 :(得分: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;
}
}
注意 - 未经测试,但应该给你一个起点......
答案 2 :(得分:-1)
将属性AddExtension
设置为true
。
ofd.AddExtension = true;