2009-07-30 5 views
0

Mein eigenständiges kleines C# -Projekt benötigt eine moderate Anzahl (ca. 100) von (XML) -Dateien, die zur Laufzeit domänenspezifische Werte bereitstellen müssen. Sie müssen nicht für die Benutzer sichtbar sein. Allerdings werde ich sie gelegentlich hinzufügen oder aktualisieren müssen, was ich manuell tun möchte (d. H. Ich sehe kein spezielles Werkzeug vor, besonders da sie außerhalb des Systems erstellt werden können).Wie organisiere ich projektspezifische schreibgeschützte Dateien in C#

Ich würde wünschen, dass sie relocatable (d. H., Um relative Dateinamen zu verwenden). Welche Optionen sollte ich in Betracht ziehen, um sie zu organisieren, und welche Anrufe wären erforderlich, um sie zu öffnen und zu lesen?

Das Projekt ist im Wesentlichen eigenständig (bezieht sich nicht auf Webdienste, Datenbanken oder andere Anwendungen von Drittanbietern). Es ist in eine kleine Anzahl von Namespaces organisiert und die gesamte Logik für die Dateien kann auf einen einzelnen Namespace beschränkt sein.

========= Es tut mir leid für die Unklarheit. Ich werde es nochmal versuchen. In einer Java-Anwendung ist es möglich, Ressourcendateien einzuschließen, die relativ zum Klassenpfad gelesen werden, nicht zur endgültigen * .exe. Ich glaube, es gibt eine Möglichkeit, in C# eine ähnliche Sache zu machen.

========= Ich glaube, ich sollte etwas im Zusammenhang mit RESX verwenden. Siehe (RESX-Dateien und XML-Daten https://stackoverflow.com/posts/1205872/edit). Ich kann Strings in ResX-Dateien schreiben, aber das ist mühsam und fehleranfällig, und ich würde es vorziehen, sie an den entsprechenden Ort zu kopieren.

Es tut mir leid, unklar zu sein, aber ich bin nicht ganz sicher, wie man die Frage stellt.

========= Die Frage scheint sehr nahe bei (C# equivalent of getClassLoader().getResourceAsStream(...)) zu liegen. Ich möchte in der Lage sein, die Dateien in VisualStudio hinzufügen - meine Frage ist, wo gebe ich sie und wie zeige ich, dass sie Ressourcen sind?

+2

C# -Projekt bedeutet eine Menge Dinge - einen Service, ein Webprojekt, ein Winsprojekt usw. Bitte seien Sie genauer. –

+0

Danke - Ich habe versucht, den Umfang zu klären –

Antwort

1

Wenn Sie sie in einen Unterordner relativ zu Ihrer ausführbaren Datei eingeben, sagen Sie .\Config Sie könnten mit File.ReadAllText(@"Config\filename.xml") auf sie zugreifen.

Wenn Sie eine ASP.NET-Anwendung haben können Sie sie in den speziellen App_Data Ordner abgelegt und greifen Sie mit File.ReadAllText(Server.MapPath("~/App_Data/filename.xml"))

0

Ich bin immer noch unklar, ob Sie eine Win Formen haben, oder Web-Projekt ... Unabhängig davon, Die Verwendung relativer Dateinamen ist nicht erforderlich, um sie verschieblich zu machen. Ich würde vorschlagen, einen Eintrag in den AppSettings-Abschnitt Ihrer web.config- oder app.config-Datei hinzuzufügen, der den vollständigen Pfad zu Ihren XML-Dateien enthält. Wenn sie verschoben werden, müssen Sie nur Ihre Konfigurationsdatei ändern.

<!-- 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)); 
     } 
    } 
} 

Natürlich können Sie die XML-Dateinamen kennen oder nicht, so dass Sie sie nicht laden und auf die gleiche Weise lesen können.

In Ihrem Fall scheint es völlig angemessen, sie in Ihren App_Data-Ordner zu legen, wenn Sie eine ASP.NET-Site haben (vorausgesetzt, es wird nie auf mehr als einem Server sein). Seien Sie vorsichtig, wenn Sie "~/App_Data" in Ihrer Konfigurationsdatei aufführen, von der Sie wissen, dass sie diese in einen vollständigen Pfad übersetzt, wie es Darin mit Server.MapPath() getan hat.

Verwandte Themen