Domanda

Il mio progetto C # piccolo e autonomo richiede un numero moderato (circa 100) di file (XML) necessari per fornire valori specifici del dominio in fase di esecuzione. Non sono tenuti ad essere visibili agli utenti. Tuttavia, dovrò aggiungerli o aggiornarli di tanto in tanto, cosa che sono disposto a fare manualmente (ovvero non immagino uno strumento specifico, specialmente perché potrebbero essere creati al di fuori del sistema).

Vorrei che fossero trasferibili (cioè per usare i nomi dei file relativi). Quali opzioni dovrei prendere in considerazione per organizzarle e quali sarebbero le chiamate necessarie per aprirle e leggerle?

Il progetto è essenzialmente autonomo (non correlato a servizi Web, database o altre applicazioni di terze parti). È organizzato in un piccolo numero di spazi dei nomi e tutta la logica dei file può essere confinata in un singolo spazio dei nomi.

========= Mi dispiace per essere poco chiaro. Ci riproverò. In un'applicazione Java è possibile includere file di risorse che vengono letti in relazione al percorso di classe, non al * .exe finale. Credo che ci sia un modo per fare una cosa simile in C #.

========= Credo che dovrei usare qualcosa legato a RESX. Vedi (file RESX e dati xml https://stackoverflow.com/posts/1205872/edit ). Posso mettere le stringhe in un file resx, ma questo è noioso e soggetto a errori e preferirei copiarli nella posizione appropriata.

Mi dispiace non essere chiaro, ma non sono sicuro di come porre la domanda.

========= La domanda sembra essere molto vicina a ( equivalente C # di getClassLoader (). GetResourceAsStream (...) ). Vorrei poter aggiungere i file in VisualStudio - la mia domanda è dove li metto e come indico che sono risorse?

È stato utile?

Soluzione 3

C'è una risposta dettagliata su http://www.attilan.com/2006 /08/accessing_embedded_resources_u.php . Sembra che il file debba essere specificato come EmbeddedResource. Non ho ancora ottenuto questo per funzionare, ma è quello che voglio.

Altri suggerimenti

Se li metti in una sottocartella relativa al tuo eseguibile, dì . \ Config sarai in grado di accedervi con File.ReadAllText (@ " Config \ filename.xml " ) .

Se si dispone di un'applicazione ASP.NET, è possibile inserirli nella speciale cartella App_Data e accedervi con File.ReadAllText (Server.MapPath (" ~ / App_Data / nomefile. xML "))

Non sono ancora chiaro se si dispone di un modulo Win o di un progetto Web ... Indipendentemente da ciò, non è necessario l'uso di nomi di file relativi per trasferirli. Suggerirei di aggiungere una voce nella sezione appSettings del tuo file web.config o app.config contenente il percorso completo dei tuoi file xml. Se vengono spostati, tutto ciò che devi fare è cambiare il tuo file di configurazione.

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

Ovviamente potresti conoscere o meno i nomi dei file xml, quindi potresti non caricarli e leggerli allo stesso modo.

Nel tuo caso sembra del tutto appropriato metterli nella tua cartella App_Data se hai un sito ASP.NET (supponendo che non sarà mai su più di un server). Fai solo attenzione se elenchi " ~ / App_Data " nel tuo file di configurazione sai come tradurlo in un percorso completo come ha fatto darin con Server.MapPath ().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top