C# C具有不同目录的多个OpenFile对话框

C# C具有不同目录的多个OpenFile对话框,c#,path,directory,C#,Path,Directory,在我的应用程序中,我有两个OpenFileDialogs,用户在其中选择不同的文件类型。第一个openfiledialog用于选择位于目录a的配置文件,第二个对话框用于选择位于目录B的xml文件 我的问题是,当我试图打开其中一个对话框时,它只会将我带到一个目录,即xml文件的目录;永远不要在配置文件的文件夹上。用户必须浏览文件夹才能找到配置文件的文件夹 我试过这个: openFileDialog1.InitialDirectory = @"C:\Users\uidr3024\Downloads\

在我的应用程序中,我有两个OpenFileDialogs,用户在其中选择不同的文件类型。第一个openfiledialog用于选择位于目录a的配置文件,第二个对话框用于选择位于目录B的xml文件

我的问题是,当我试图打开其中一个对话框时,它只会将我带到一个目录,即xml文件的目录;永远不要在配置文件的文件夹上。用户必须浏览文件夹才能找到配置文件的文件夹

我试过这个:

openFileDialog1.InitialDirectory = @"C:\Users\uidr3024\Downloads\Tool\cfg";
这是:

openFileDialog2.InitialDirectory = @"C:\Users\uidr3024\Downloads\Tool\XMLs";
它成功了。但是,当应用程序在不同的计算机上使用时,我该怎么办呢?工具的文件夹名称可能不同,但cfg和XMLs的文件夹名称仍然相同


我一直在考虑GetFullPath和GetTempPath,但我不确定。

在项目结构中使用相对路径。 或者可能是安装路径。 %programfiles%/myapp/tools/xml 或
C:\Users\%username%\AppData

如评论中所述,您不应该使用绝对路径。 Net framework具有一些功能,可以为您检索特定于用户的可变路径,而不是将这些路径用于存储/加载位置

使用该方法可以获得公共文件夹路径。这将返回系统定义的各种内容的位置。这将确保您永远不必弄清楚机器上的目录是正确的还是不同的,因为您的引用总是相对的,而不是绝对的。 在您的情况下,您可以使用它访问项目的配置文件特定文件夹

// Use the Environment.GetFolderPath with Environment.SpecialFolder.ApplicationData
// to retrieve the %userprofile%\AppData\Roaming folder for the user
// Also use Path.Combine to link that path to your relative paths.
openFileDialog1.InitialDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"<YourAppName>\Tools\cfg");

openFileDialog1.InitialDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"<YourAppName>\Tools\XML");
额外信息:

我建议您在中心位置“存储”或生成文件夹名称。这将确保只有一个地方需要添加或更改文件夹名称,而不必在整个代码库中搜索特定字符串的用法

可以为此目的使用/扩展的帮助器类的一个小示例:

public static class DirectoryStrings
{
  private const string AppFolderName = "MyAppName";

  public static string ToolsFolderName
  {
    get { return Path.Combine(KnownFolders.GetDefaultPath(KnownFolder.Downloads), AppFolderName, "Tools"); }
  }

  public static string XmlFolderName
  {
    get { return Path.Combine(ToolsFolderName, "XML"); }
  }

  public static string CfgFolderName
  {
    get { return Path.Combine(ToolsFolderName, "cfg"); }
  }
}
这样就可以获得干净的代码

openFileDialog1.InitialDirectory = DirectoryStrings.XmlFolderName;

首先,所有文件应位于指定位置,而不是自定义位置。如果文件在其他系统中访问,则无法检索这些文件,因为不会有像Downloads这样的文件夹在应用程序设置中自己存储上次使用的目录。抱歉,我花了很长时间才作出响应。我如何准确地声明或设置目录中的应用程序设置?是的,在我的示例代码中,该文件夹将位于下载文件夹中。但是,如果另一个用户碰巧将其放在另一个不同的文件夹(可能是文档)上,该怎么办?还是桌面?这是不同的,我不完全确定他们会把工具文件夹放在哪里。这是否意味着我必须告诉此应用程序的未来用户指定文件夹的位置?请查看Hans Passants的评论。您的评论会改变很多事情,您需要存储最后一个用户选择的目录。但是,如果您设法提取Tools文件夹所在的根目录,则仍然可以使用中心帮助器类。
openFileDialog1.InitialDirectory = DirectoryStrings.XmlFolderName;