如何“预选择”SaveFileDialog中的文件
本文关键字:SaveFileDialog 文件 预选择 选择 如何 | 更新日期: 2023-09-27 18:18:28
在SaveFileDialog
中,我经常发现用户想要保存的文件已经被选中了,他们所要做的就是按回车键。我想在我的程序中创建这个功能。
这是我当前的尝试:
Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
dlg.Filter = "CCT files (.cct)|*.cct"; //Filter only .cct extensions
Nullable<bool> result = dlg.ShowDialog(); //Show the SaveFileDialog
directoryName = Directory.GetCurrentDirectory(); //ATTEMPT to get the directory that has been opened
fileList = Directory.GetFiles(@directoryName, "*.cct"); //Put the name of the fill path to the file into string form
dlg.FileName = fileList[0]; //Set SelectedItem to the previous file
我认为我的问题是,每当我尝试GetCurrentDirectory
,它返回程序的位置(调试文件夹),而不是保存位置被打开。
我如何允许在.cct
作为扩展名的位置预选文件?
更新为清晰
我认为这将澄清的事情要注意,一个SaveFileDialog
总是打开到最后一个目录,你保存文件到该程序。这就是我要处理的目录。
解决问题的关键是在打开SaveFileDialog之前给InitialDirectory
属性一个值。
当然,第一次调用这个SaveFileDialog时,之前没有所选文件夹的记录。因此,您可以将此值指向一个众所周知的文件夹,如MyDocuments
。
在第一次调用之后,您可以获得所选择的路径并将其保存在配置文件的预定义设置中。现在,当再次调用时,您可以简单地检索该值并将其应用于InitialDirectory
// A default folder when no previous one has been saved...
string directoryName = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
dlg.Filter = "CCT files (.cct)|*.cct"; //Filter only .cct extensions
// Try to get back the previous saved folder...
if(ConfigurationManager.AppSettings["WorkingDirectory"] != null)
directoryName = ConfigurationManager.AppSettings["WorkingDirectory"];
dlg.InitialDirectory = directoryName;
fileList = Directory.GetFiles(directoryName, "*.cct");
if(fileList.Length > 0)
{
// Set the default name to show in the dialog
dlg.FileName = Path.GetFileName(fileList[0]);
Nullable<bool> result = dlg.ShowDialog();
if(result.HasValue && result.Value)
{
// Try to insert or update the setting with the choosen path
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
if(config.AppSettings.Settings["WorkingDirectory"] != null)
config.AppSettings.Settings["WorkingDirectory"].Value = Path.GetDirectoryName(dlg.FileName);
else
config.AppSettings.Settings.Add("WorkingDirectory",Path.GetDirectoryName(dlg.FileName));
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
}
}
呃…你是否意识到是你的应用生成了SaveFileDialog,不是吗?
因此,每次显示保存对话框时,只需通过查询FileDialog来记住保存文件的位置。FileName属性(http://msdn.microsoft.com/en-us/library/microsoft.win32.filedialog.initialdirectory(v=vs.110).aspx),并从文件名中解析目录路径。
您可以将其保存在某个方便的位置,并且每次显示保存文件对话框时,根据该路径设置初始目录。
http://msdn.microsoft.com/en-us/library/microsoft.win32.filedialog.initialdirectory (v = vs.110) . aspx
我不打算在这里放任何代码,因为我认为这是一个设计方法问题,而不是"给我看代码"问题。让我知道如果你需要我通过代码说明(希望不是!)
要解决我的问题,基本上我所要做的就是存储最后选择的文件名。我决定,既然SaveFileDialog
在默认情况下已经打开了最后访问的路径,那么在程序的第一次运行中,我将允许用户选择他们想要保存的文件。然后我将存储文件路径,在保存时,如果存在文件名,我会将新的dlg.FileName
设置为存储的路径。
string currentFileName;
string[] currentFileName_Array;
Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
dlg.Filter = "CCT files (.cct)|*.cct"; //Filter only .cct extensions
if (currentFileName != "" && currentFileName != null) //If a pre-selected filename exists
dlg.FileName = currentFileName_Array[currentFileName_Array.Count() - 1];
Nullable<bool> result = dlg.ShowDialog();
if (result == true)
{
currentFileName = dlg.FileName; //Save the selected File Name
currentFileName_Array = currentFileName.Split('''');
}
感谢大家的帮助!