我独立的小型C#项目需要一个中等数量(大约100个)的(XML)文件,这些文件是在运行时提供特定于域的值所必需的。它们不需要对用户可见。但是我需要添加它们或者偶尔更新它们我准备手动完成(即我没有设想一个特定的工具,特别是因为它们可能在系统外部创建)。
我希望它们可以重定位(即使用相对文件名)。我应该考虑哪些选项来组织它们以及打开和阅读它们所需的调用是什么?
该项目基本上是独立的(与Web服务,数据库或其他第三方应用程序无关)。它被组织成少量的命名空间,文件的所有逻辑都可以限制在一个命名空间中。
====== 我很抱歉不清楚。我会再试一次。在Java应用程序中,可以包含相对于类路径读取的资源文件,而不是最终的* .exe。我相信有一种方法可以在C#中做类似的事情。
====== 我相信我应该使用与RESX相关的东西。请参阅(RESX文件和xml数据https://stackoverflow.com/posts/1205872/edit)。我可以将字符串放在resx文件中,但这很乏味且容易出错,我宁愿将它们复制到适当的位置。
我很抱歉不清楚,但我不太确定如何提出这个问题。
====== 问题似乎非常接近(C# equivalent of getClassLoader().getResourceAsStream(...))。我希望能够在VisualStudio中添加文件 - 我的问题是我在哪里放置它们以及如何表明它们是资源?
答案 0 :(得分:1)
如果您将它们放在相对于可执行文件的子文件夹中,请说.\Config
,您可以使用File.ReadAllText(@"Config\filename.xml")
访问它们。
如果您有一个ASP.NET应用程序,可以将它们放在特殊的App_Data
文件夹中,并使用File.ReadAllText(Server.MapPath("~/App_Data/filename.xml"))
答案 1 :(得分:0)
我还不清楚你是否有Win表单或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()一样。
答案 2 :(得分:0)
http://www.attilan.com/2006/08/accessing_embedded_resources_u.php有一个详细的答案。看来该文件必须指定为EmbeddedResource。我还没有这个工作,但这是我想要的。