在web.config中指定相关文件位置以供标准C#类库使用

我正在努力找到一种在web.config appSettings中指定文件位置的方法,该方法避免使用硬编码路径但允许非“网络感知”C#库来查找文件。

C#库使用标准的File.OpenFile.Exists方法等来操作数据文件,该文件存储在我的Web应用程序(ASP.NET MVC)树中,例如:

 \content\data\MyDataFile.txt 

要求:

  • 我希望能够指定我的路径,例如:
         
这个 - > 
不是 - > 
         
  • 我不希望C#库知道它正在使用的Web应用程序,因为它在其他软件中使用,并且Web应用程序不需要知道C#库的配置,所以我真的不知道想要尽可能在层之间传递配置信息。

关于如何干净利落地做任何建议? 谢谢!

您可以使用Path.Combine组合AppDomain.CurrentDomain.BaseDirectory和您的相对路径。

这将为您提供相对于ASP.NET应用程序中的ASP.NET根目录(〜/)的路径,或相对于WinForms或控制台应用程序中包含可执行文件的目录的路径。

为什么不让Web应用程序从配置文件中读取路径,使用Server.MapPath解析它,然后将生成的路径传递给类库?


根据您的评论,我有一个不同的建议:不要使用相对路径。

例如

在你的web.config中

     

并在.cs文件后面的代码中

  string filters = "*.jpg;*.png;*.gif"; string Path = ConfigurationManager.AppSettings["FilePath"].ToString(); List images = new List(); foreach (string filter in filters.Split(';')) { FileInfo[] fit = new DirectoryInfo(this.Server.MapPath("~/images")).GetFiles(filter); foreach (FileInfo fi in fit) { images.Add(String.Format(Path + "/{0}", fi)); } } RepeaterImages.DataSource = images; RepeaterImages.DataBind(); 

你也可以这样做:

在web.config中:

  

在你的代码中:

  string filePath = ConfigurationManager.AppSettings["MyFileLocation"]; Path.Combine(AppDomain.CurrentDomain.BaseDirectory, filePath) 

结果将给出类似:“C:\ yourproj \ content \ dataMyDataFile”之类的东西。

如果你这样做

 File.Open(@"content\data\file.txt") 

它将相对于执行assembly位置。