C# 如何";预选;保存文件对话框中的文件

C# 如何";预选;保存文件对话框中的文件,c#,wpf,savefiledialog,C#,Wpf,Savefiledialog,通常,在SaveFileDialog中,我发现用户想要保存到的文件已经被选中,他们所要做的就是按enter键。我想在我的程序中创建此功能 这是我目前的尝试: Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog(); dlg.Filter = "CCT files (.cct)|*.cct"; //Filter only .cct extensions Nullable<bool> resu

通常,在
SaveFileDialog
中,我发现用户想要保存到的文件已经被选中,他们所要做的就是按enter键。我想在我的程序中创建此功能

这是我目前的尝试:

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
Microsoft.Win32.SaveFileDialog dlg=new Microsoft.Win32.SaveFileDialog();
dlg.Filter=“CCT文件(.CCT)|*.CCT”//仅筛选器。cct扩展
可为空的结果=dlg.ShowDialog()//显示“保存文件”对话框
directoryName=Directory.GetCurrentDirectory()//尝试获取已打开的目录
fileList=Directory.GetFiles(@directoryName,*.cct)//将文件的填充路径的名称放入字符串形式
dlg.FileName=文件列表[0]//将SelectedItem设置为上一个文件
我认为我的问题是,每当我尝试
GetCurrentDirectory
,它都会返回程序位置(调试文件夹),而不是正在打开的保存位置

如何允许在扩展名为
.cct
的位置预选文件

为清晰起见进行更新


我想应该澄清一下,一个
SaveFileDialog
总是打开到您在该程序中保存文件的最后一个目录。这是我要使用的目录。这就像覆盖正在处理的文件时发生的情况一样。

解决问题的关键是在打开SaveFileDialog之前,为
InitialDirectory
属性指定一个值

当然,第一次调用此SaveFileDialog时,choosen文件夹没有以前的记录。因此,您可以将此值指向一个众所周知的文件夹,如
MyDocuments

在第一次调用之后,您可以获取choosen路径并将其保存在配置文件的预定义设置中。现在,当再次调用时,您只需检索该值并将其应用于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");
    }
}
//以前的文件夹未保存时的默认文件夹。。。
string directoryName=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Microsoft.Win32.SaveFileDialog dlg=新建Microsoft.Win32.SaveFileDialog();
dlg.Filter=“CCT文件(.CCT)|*.CCT”//仅筛选器。cct扩展
//尝试取回以前保存的文件夹。。。
如果(ConfigurationManager.AppSettings[“WorkingDirectory”]!=null)
directoryName=ConfigurationManager.AppSettings[“工作目录”];
dlg.InitialDirectory=目录名;
fileList=Directory.GetFiles(directoryName,*.cct);
如果(fileList.Length>0)
{
//设置要在对话框中显示的默认名称
dlg.FileName=Path.GetFileName(文件列表[0]);
可为空的结果=dlg.ShowDialog();
if(result.HasValue&&result.Value)
{
//尝试使用choosen路径插入或更新设置
Configuration config=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
if(config.AppSettings.Settings[“WorkingDirectory”]!=null)
config.AppSettings.Settings[“WorkingDirectory”].Value=Path.GetDirectoryName(dlg.FileName);
其他的
config.AppSettings.Settings.Add(“WorkingDirectory”,Path.GetDirectoryName(dlg.FileName));
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection(“应用设置”);
}
}
呃。。。你确实意识到是你的应用程序产生了SaveFileDialog,不是吗

因此,每次显示“保存”对话框时,只要通过查阅FileDialog.FileName属性()记住保存文件的位置,并从文件名中解析目录路径即可

您可以将其保存在某个方便的位置,每次显示“保存文件”对话框时,都可以根据该路径设置初始目录


我不会在这里放任何代码,因为我认为这是一个设计方法问题,而不是“向我展示代码”问题。如果您需要我通过代码(希望不是!)来说明,请告诉我。

为了解决我的问题,基本上我所要做的就是存储最后选择的文件名。我决定,由于默认情况下,
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('\\');
}
字符串currentFileName;
字符串[]currentFileName\u数组;
Microsoft.Win32.SaveFileDialog dlg=新建Microsoft.Win32.SaveFileDialog();
dlg.Filter=“CCT文件(.CCT)|*.CCT”//仅筛选器。cct扩展
if(currentFileName!=“&¤tFileName!=null)//如果存在预先选择的文件名
dlg.FileName=currentFileName_数组[currentFileName_数组.Count()-1];
可为空的结果=dlg.ShowDialog();
如果(结果==真)
{
currentFileName=dlg.FileName;//保存所选文件名
currentFileName\u数组=currentFileName.Split(“\\”);
}

谢谢大家的帮助

您是否尝试过设置SaveFileDialog的InitialDirectory?谢谢Steve我以为是Windows对不起你可以把它放在任何你希望你的用户保存文件的地方,例如我的文档。我有点搞不懂你的意思,好像你在试图了解用户的想法?你如何知道你想要的文件在文件列表[0]中?当你首先加载文件时,你可能应该存储原始文件的完整路径。不清楚你想要实现什么(对我来说)。你能澄清一下吗?是否要选择上次选择路径中的第一个文件?因为每次都会重置
directoryName
,我发现
fileList.Length
始终等于零,因为MyDocuments中不存在.cct文件。因此,
SaveFileDialog
永远不会打开。我遗漏了什么吗?它应该只发生在第一次,然后,当你按下OK时,所选的目录应该写在你的con中