¿Cómo debo organizar los archivos de solo lectura específicos del proyecto en c #?

StackOverflow https://stackoverflow.com/questions/1205872

  •  05-07-2019
  •  | 
  •  

Pregunta

Mi proyecto C # pequeño e independiente requiere un número moderado (ca 100) de archivos (XML) que se requieren para proporcionar valores específicos del dominio en tiempo de ejecución. No se requiere que sean visibles para los usuarios. Sin embargo, tendré que agregarles o actualizarlos de vez en cuando, lo cual estoy preparado para hacer manualmente (es decir, no visualizo una herramienta específica, especialmente porque pueden crearse fuera del sistema).

Me gustaría que fueran reubicables (es decir, que usen nombres de archivos relativos). ¿Qué opciones debo considerar para organizarlas y cuáles serían las llamadas necesarias para abrirlas y leerlas?

El proyecto es esencialmente independiente (no relacionado con servicios web, bases de datos u otras aplicaciones de terceros). Está organizado en una pequeña cantidad de espacios de nombres y toda la lógica de los archivos se puede limitar a un solo espacio de nombres.

========= Lo siento por no estar claro. Lo intentaré otra vez. En una aplicación Java es posible incluir archivos de recursos que se leen en relación con el classpath, no al final * .exe. Creo que hay una manera de hacer algo similar en C #.

========= Creo que debería estar usando algo relacionado con RESX. Consulte (archivos RESX y datos xml https://stackoverflow.com/posts/1205872/edit ). Puedo poner cadenas en un archivo resx, pero esto es tedioso y propenso a errores y preferiría copiarlos en la ubicación adecuada.

Lamento no estar claro, pero no estoy seguro de cómo hacer la pregunta.

========= La pregunta parece estar muy cerca de ( C # equivalente de getClassLoader (). GetResourceAsStream (...) ). Me gustaría poder agregar los archivos en VisualStudio. Mi pregunta es ¿dónde los coloco y cómo indico que son recursos?

¿Fue útil?

Solución 3

Hay una respuesta detallada en http://www.attilan.com/2006 /08/accessing_embedded_resources_u.php . Parece que el archivo tiene que ser especificado como un EmbeddedResource. Todavía no tengo esto para trabajar pero es lo que quiero.

Otros consejos

Si los coloca en una subcarpeta relacionada con su ejecutable, diga . \ Config que podría acceder a ellos con File.ReadAllText (@ " Config \ filename.xml " ) .

Si tiene una aplicación ASP.NET, puede colocarlas dentro de la carpeta especial App_Data y acceder a ellas con File.ReadAllText (Server.MapPath (" ~ / App_Data / filename). xml "))

Todavía no tengo claro si tiene formularios Win o proyectos web ... En cualquier caso, el uso de nombres de archivos relativos no es necesario para que sean reubicables. Le sugeriría agregar una entrada en la sección de ajustes de la aplicación de su archivo web.config o app.config que contenga la ruta completa a sus archivos xml. Si se mueven, todo lo que tienes que hacer es cambiar tu archivo de configuración.

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

Por supuesto que puede o no saber los nombres de los archivos xml, por lo que no puede cargarlos y leerlos de la misma manera.

En su caso, parece totalmente apropiado colocarlos en su carpeta App_Data si tiene un sitio ASP.NET (asumiendo que nunca estará en más de un servidor). Solo tenga cuidado si enumera " ~ / App_Data " en tu archivo de configuración, sabes traducir eso en una ruta completa como lo hizo Darin con Server.MapPath ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top