Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要帮助使文件导出功能记住用户选择的路径吗_C#_.net_Winforms_Web Applications - Fatal编程技术网

C# 需要帮助使文件导出功能记住用户选择的路径吗

C# 需要帮助使文件导出功能记住用户选择的路径吗,c#,.net,winforms,web-applications,C#,.net,Winforms,Web Applications,我的程序中有一个导出数据的函数。导出功能非常好,但我遇到了一些问题:当用户单击“导出”时,他们会看到一个文件夹浏览器,可以选择他们希望导出到的硬盘上的位置。浏览器一开始启动时,所有硬盘驱动器/文件夹都会像应该的那样折叠,但我不知道如何让程序记住用户选择的位置,以便下次他们想要导出时,它会自动打开到该位置,而不是再次打开时所有内容都折叠。我想我只是在逻辑上有点问题。有人有什么建议吗 另外,为了澄清,我试图让它只在会话期间记住位置,而不是像永久性地记在寄存器上一样 以下是我目前的导出功能,如果您认为

我的程序中有一个导出数据的函数。导出功能非常好,但我遇到了一些问题:当用户单击“导出”时,他们会看到一个文件夹浏览器,可以选择他们希望导出到的硬盘上的位置。浏览器一开始启动时,所有硬盘驱动器/文件夹都会像应该的那样折叠,但我不知道如何让程序记住用户选择的位置,以便下次他们想要导出时,它会自动打开到该位置,而不是再次打开时所有内容都折叠。我想我只是在逻辑上有点问题。有人有什么建议吗

另外,为了澄清,我试图让它只在会话期间记住位置,而不是像永久性地记在寄存器上一样

以下是我目前的导出功能,如果您认为这会有所帮助:

private void Export(int formatVersion, bool pureXmlDriver)
{
  if (Device != null)
  {
    Utilities.StripShortNameFromLongNames(Device);

    using (var folderBrowser = new FolderBrowserDialog())
    {
      folderBrowser.Description = Resources.SelectExportFolder;

      if (folderBrowser.ShowDialog() == DialogResult.OK)
      {
        string selectedFolder = folderBrowser.SelectedPath;

        try
        {
          Cursor = Cursors.WaitCursor;

          HandleExport(formatVersion, pureXmlDriver, selectedFolder);
        }
        finally
        {
          Cursor = Cursors.Default;
        }
      }
    }
  }
}

这应该可以做到。您只需要一个类字段来保存最后一个值

public class MyClass
{
    private string selectedPath = "";

    public void Export(int formatVersion, bool pureXmlDriver)
    {
        if (Device != null)
        {
            Utilities.StripShortNameFromLongNames(Device);
            using (var folderBrowser = new FolderBrowserDialog())
           {
               folderBrowser.Description = Resources.SelectExportFolder;
               folderBrowser.SelectedPath = selectedPath;
               if (folderBrowser.ShowDialog() == DialogResult.OK)
               {
                   selectedFolder = folderBrowser.SelectedPath;
                   try
                   {
                       Cursor = Cursors.WaitCursor;
                       HandleExport(formatVersion, pureXmlDriver, selectedFolder);
                   }
                   finally
                   {
                       Cursor = Cursors.Default;
                   }
               }
           }
       }
   }    
}

只需设置最初的选择路径,
folderBrowser.SelectedPath=selectedFolder
@jac我该把它放在哪里呢?我不能将它放在我的folderBrowser.ShowDialog()之前,因为它还没有初始化,对吗?也许我错了。@Raymond不,当你
new
it时,对象被初始化了。您已经在设置
Description
属性;没有理由不能设置
SelectedPath
。但是,您确实需要将
selectedPath
缓存在上一次导出的某个位置。如果您的selectedPath尚未初始化,则可以为其指定默认值,即当前程序路径,或将其保留为空。这个问题听起来好像用户已经选择了一个文件夹至少一次,而您想打开对话框到他们最后的选择。也许你在问如何保持所选路径的值?如果这是问题所在,就在你的类中将其作为字段级变量。@jac是的,我不善于解释自己。很抱歉。以下是我想要的:用户在会话中第一次单击导出,文件夹浏览器不默认为任何位置,用户选择要导出到的位置,所选位置将被记住,这样,如果他们在会话中再次单击导出,文件夹浏览器将默认为以前选择的位置。