我有下面的應用程序。爲了讓讀者更容易測試,我稍作修改。我注意到,當我使用擴展名設置文件名時,例如test.txt,txt擴展名被對話框刪除。不過,我希望用戶能夠指定擴展名,更重要的是我希望能夠設置擴展名。在我看來,破解它的一種方法是根據我的擴展名修改過濾器。這是唯一的方法嗎?SaveFileDialog從設置文件名中刪除擴展名
我正在使用VS 2010 Express。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;
using System.IO;
using System.Windows;
namespace SpeedDating
{
partial class Program
{
[STAThread]
static void Main(string[] args)
{
Form form = new Form();
form.WindowState = FormWindowState.Minimized;
form.ShowInTaskbar = false;
form.TopMost = true;
form.Show();
string filename = "test.txt";
string ext = filename.Substring(filename.LastIndexOf('.'));
SaveFileDialog dialog = new SaveFileDialog();
dialog.Title = "SpeedDating App";
dialog.RestoreDirectory = true;
dialog.CheckFileExists = false;
dialog.CheckPathExists = false;
dialog.SupportMultiDottedExtensions = true;
dialog.AddExtension = false;
dialog.Filter = "All files (*.*)|*.*";
dialog.FileName = DateTime.Now.ToString("yyyyMMdd") + ext;
DialogResult result = dialog.ShowDialog();
if (result == DialogResult.OK && dialog.FileName != "")
{
try
{
FileStream outfs = File.Create(dialog.FileName);
FileStream infs = File.Open(filename, FileMode.Open);
infs.CopyTo(outfs);
infs.Close();
outfs.Close();
MessageBox.Show(form, "Copied file.");
}
catch (NotSupportedException ex)
{
MessageBox.Show(form, "Probably removed the original file.");
}
}
else if (result != DialogResult.Cancel)
{
MessageBox.Show(form, "No path found to write to.");
}
form.Close();
}
}
}
我複製了您的代碼,並且僅更改了消息框中對「表單」的引用。這對我來說可以。我總是得到我輸入對話框的確切文件。 – DonBoitnott
不是我認爲它引起任何問題,但是無論如何,「form」對象的目的是什麼?它是空的,什麼都不做。你不需要固定你所知道的MessageBox。 – DonBoitnott
在我的系統上,我發現該對話框遵循用戶在操作系統級別設置的任何內容。如果擴展名在文件瀏覽器中隱藏,那麼它們也會隱藏在對話框中,而相反的情況也是如此。 –