2009-07-30 66 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()完成的完整路徑。