如何“预选择”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中的文件

解决问题的关键是在打开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('''');
}

感谢大家的帮助!