2009-07-30 60 views
0

我的独立小型C#项目需要中等数量(大约100个)(XML)文件,这些文件在运行时需要提供特定于域的值。它们不要求用户可见。然而,我需要添加它们或偶尔更新它们,我准备手动进行更新(即我没有设想一个特定的工具,特别是因为它们可能是在系统之外创建的)。我该如何在c#中组织项目特定的只读文件?

我希望他们可以重定位(即使用相对文件名)。我应该考虑哪些选项来组织它们以及打开和阅读它们所需的电话是什么?

该项目基本上是独立的(与Web服务,数据库或其他第三方应用程序无关)。它被组织成少量的命名空间,并且文件的所有逻辑可以局限于单个命名空间。

========= 我很抱歉不清楚。我会再试一次。在Java应用程序中,可以包含与类路径相关的资源文件,而不是最终的* .exe文件。我相信有一种在C#中做类似事情的方法。

========= 我相信我应该使用与RESX相关的某些东西。请参阅(RESX文件和xml数据https://stackoverflow.com/posts/1205872/edit)。我可以将字符串放在resx文件中,但这很枯燥且容易出错,我宁愿将它们复制到适当的位置。

对不起,我不清楚,但我不太清楚如何提出这个问题。

========= 该问题似乎非常接近(C# equivalent of getClassLoader().getResourceAsStream(...))。我希望能够在VisualStudio中添加文件 - 我的问题是我在哪里放置它们,以及如何指示它们是资源?

+2

C#项目意味着很多东西 - 服务,web项目,win项目等。请更具体一些。 – 2009-07-30 11:06:08

回答

1

如果您将它们放入与您的可执行文件相关的子文件夹中,比如说.\Config,则可以使用File.ReadAllText(@"Config\filename.xml")访问它们。

如果你有一个ASP.NET应用程序,你可以把他们的特殊App_Data文件夹内,并与File.ReadAllText(Server.MapPath("~/App_Data/filename.xml"))

0

我还不清楚他们访问你是否有一个双赢的形式,或web项目......无论如何,使用相对文件名称不需要使它们可重定位。我建议在web.config或app.config文件的appSettings部分中添加一个条目,其中包含xml文件的完整路径。如果他们被移动,你所要做的就是改变你的配置文件。

<!-- app/web.config ---> 
<appSettings> 
     <add key="filelocation" value="c:\xmlfiles"/> 
</appSettings> 

//c# code (in ASP.NET app, for example) 
using System.IO; 
using System.Xml.Linq; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     string path = ConfigurationManager.AppSettings["filelocation"]; 
     DirectoryInfo di = new DirectoryInfo(path); 
     List<XDocument> xmlDocs = new List<XDocument>(); 
     foreach (FileInfo fi in di.GetFiles()) 
     { 
      xmlDocs.Add(XDocument.Load(fi.FullName)); 
     } 
    } 
} 

当然,您可能会也可能不知道xml文件名,所以您可能不会加载并以相同的方式读取它们。

在你的情况下,如果你有一个ASP.NET站点(假设它永远不会在多个服务器上),将它们放在你的App_Data文件夹中似乎是完全合适的。如果你在你的配置文件中列出“〜/ App_Data”,你应该小心,因为你知道把它转换成像darin一样用Server.MapPath()完成的完整路径。