Question

Mon projet Smallish C # autonome nécessite un nombre modéré (environ 100) de fichiers (XML) nécessaires pour fournir des valeurs spécifiques à un domaine au moment de l'exécution. Ils ne sont pas tenus d'être visibles pour les utilisateurs. Toutefois, j’aurai besoin d’y ajouter ou de les mettre à jour de temps en temps, ce que je suis disposé à faire manuellement (c’est-à-dire que je n’envisage pas d’outil spécifique, d’autant plus qu’ils pourraient être créés en dehors du système).

Je souhaiterais qu’ils puissent être déplacés (c’est-à-dire utiliser des noms de fichiers relatifs). Quelles options dois-je envisager pour les organiser et quels seraient les appels requis pour les ouvrir et les lire?

Le projet est essentiellement autonome (il n'est pas lié aux services Web, aux bases de données ou à d'autres applications tierces). Il est organisé en un petit nombre d'espaces de noms et toute la logique des fichiers peut être confinée à un seul espace de noms.

========= Je suis désolé de ne pas être clair. Je vais réessayer. Dans une application Java, il est possible d'inclure des fichiers de ressources lus par rapport au classpath, et non au fichier final * .exe. Je crois qu'il y a un moyen de faire la même chose en C #.

========= Je crois que je devrais utiliser quelque chose lié à RESX. Voir (Fichiers RESX et données XML https://stackoverflow.com/posts/1205872/edit ). Je peux mettre des chaînes dans des fichiers resx, mais cela est fastidieux et source d’erreurs et je préférerais les copier à l’emplacement approprié.

Je suis désolé de ne pas être clair, mais je ne sais pas trop comment poser la question.

========= La question semble être très proche de ( équivalent C # de getClassLoader (). GetResourceAsStream (...) ). Je souhaite pouvoir ajouter les fichiers dans VisualStudio. Ma question est de savoir où les placer et comment les indiquer comme ressources.

Était-ce utile?

La solution 3

Vous trouverez une réponse détaillée à http://www.attilan.com/2006 /08/accessing_embedded_resources_u.php . Il semble que le fichier doit être spécifié en tant que EmbeddedResource. Je n'ai pas encore réussi à faire fonctionner cela, mais c'est ce que je veux.

Autres conseils

Si vous les mettez dans un sous-dossier relatif à votre exécutable, dites . \ Config , vous pourrez y accéder avec File.ReadAllText (@ " Config \ filename.xml " ) .

Si vous avez une application ASP.NET, vous pouvez la placer dans le dossier spécial App_Data et y accéder avec File.ReadAllText (Server.MapPath (" ~ ~ / App_Data / filename. xml "))

Je ne sais toujours pas si vous avez un formulaire Windows ou un projet Web ... Quoi qu'il en soit, l'utilisation de noms de fichiers relatifs n'est pas nécessaire pour pouvoir les transférer. Je suggérerais d'ajouter une entrée dans la section appSettings de votre fichier web.config ou app.config contenant le chemin d'accès complet à vos fichiers xml. S'ils sont déplacés, il vous suffit de modifier votre fichier de configuration.

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

Bien sûr, vous pouvez ou non connaître les noms de fichier XML, vous ne pouvez donc pas les charger et les lire de la même manière.

Dans votre cas, il semble tout à fait approprié de les placer dans votre dossier App_Data si vous avez un site ASP.NET (en supposant qu'il ne se trouvera jamais sur plus d'un serveur). Faites attention si vous répertoriez " ~ / App_Data " dans votre fichier de configuration, vous savez le traduire en un chemin complet comme le fit darin avec Server.MapPath ().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top