¿Cómo leo un recurso incrustado (archivo de texto) usando StreamReader
y lo devuelvo como una cadena? Mi script actual utiliza un formulario y cuadro de texto de Windows que permite al usuario buscar y reemplazar texto en un archivo de texto que no está incrustado.
private void button1_Click(object sender, EventArgs e)
{
StringCollection strValuesToSearch = new StringCollection();
strValuesToSearch.Add("Apple");
string stringToReplace;
stringToReplace = textBox1.Text;
StreamReader FileReader = new StreamReader(@"C:\MyFile.txt");
string FileContents;
FileContents = FileReader.ReadToEnd();
FileReader.Close();
foreach (string s in strValuesToSearch)
{
if (FileContents.Contains(s))
FileContents = FileContents.Replace(s, stringToReplace);
}
StreamWriter FileWriter = new StreamWriter(@"MyFile.txt");
FileWriter.Write(FileContents);
FileWriter.Close();
}
fuente
Environment.SpecialFolder
para obtener la carpeta del escritorio. Debe tener en cuenta que el recurso tendrá un espacio de nombres en función de su ruta dentro del proyecto, por lo que su nombre puede no ser justofile1.txt
.GetManifestResourceStream
necesita la ruta como indica @adrian. Si se ayuda a nadie, ese camino es como lo muestra @SimpleCoder en el ejemplo:MyNamespace.Filename.Ext
. Lo había intentado anteriormente,MyNamespace.Resources.Filename.Ext
pero eso da como resultado un nulo.using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
Puede agregar un archivo como recurso utilizando dos métodos separados.
El código C # requerido para acceder al archivo es diferente , dependiendo del método utilizado para agregar el archivo en primer lugar.
Método 1: Agregue el archivo existente, establezca la propiedad en
Embedded Resource
Agregue el archivo a su proyecto, luego establezca el tipo en
Embedded Resource
.NOTA: Si agrega el archivo usando este método, puede usarlo
GetManifestResourceStream
para acceder a él (vea la respuesta de @dtb )Método 2: agregar archivo a
Resources.resx
Abra el
Resources.resx
archivo, use el cuadro desplegable para agregar el archivo, configuradoAccess Modifier
enpublic
.NOTA: Si agrega el archivo usando este método, puede usarlo
Properties.Resources
para acceder a él (consulte la respuesta de @Night Walker ).fuente
Resource
que no haga nada que le permita leer el elemento como un recurso? tienes que usarEmbeddedResource
o agregar a unResources.resx
archivo?Properties.Resources.Your_resource_name
escribir lo siguiente:Properties.Resources.ResourceManager.GetObject("Your_resource_name")
.Básicamente, se utiliza
System.Reflection
para obtener una referencia a la Asamblea actual. Entonces, lo usasGetManifestResourceStream()
.Ejemplo, de la página que publiqué:
Nota : es necesario agregar
using System.Reflection;
para que esto funcionefuente
namespace
como parte del nombre del recursovar auxList= System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
Este método podría ser muy útil cuando desee aprender el nombre exacto del recurso. (Tomado de la pregunta stackoverflow.com/questions/27757/… )En Visual Studio, puede incrustar directamente el acceso a un recurso de archivo a través de la pestaña Recursos de las propiedades del Proyecto ("Análisis" en este ejemplo).
Se puede acceder al archivo resultante como una matriz de bytes por
Si lo necesita como una secuencia, entonces (de https://stackoverflow.com/a/4736185/432976 )
fuente
Cuando agrega el archivo a los recursos, debe seleccionar sus Modificadores de acceso como públicos de lo que puede hacer algo como lo siguiente.
CLIST01 es el nombre del archivo incrustado.
En realidad, puede ir a resources.Designer.cs y ver cuál es el nombre del getter.
fuente
Action
aIncorporated ressource
, no tengo ningúnAccess Modifiers
campo en el panel de propiedades. Además, no tengo unaPropersites.Resources
clase, recibo unThe name 'Properties' does not exist in the current context
error al compilar su código.Resources.resx
, vea mi respuesta sobre los diferentes métodos para incrustar archivos en un proyecto.agregando, por ejemplo, Testfile.sql Menú del proyecto -> Propiedades -> Recursos -> Agregar archivo existente
fuente
Sé que es un hilo viejo, pero esto es lo que funcionó para mí:
lee el texto así:
El texto que agregué a los recursos: 'SomeText.txt'
fuente
También puede usar esta versión simplificada de la respuesta de @ dtb:
fuente
Algo que aprendí ahora es que no se permite que su archivo tenga un "." (punto) en el nombre del archivo.
Templates.plainEmailBodyTemplate-en.txt -> Funciona !!!
Templates.plainEmailBodyTemplate.en.txt -> no funciona a través de GetManifestResourceStream ()
Probablemente porque el marco se confunde sobre espacios de nombres frente a nombre de archivo ...
fuente
Con todos sus poderes combinados, uso esta clase auxiliar para leer recursos de cualquier ensamblado y cualquier espacio de nombres de manera genérica.
fuente
Leí el uso de un archivo de texto de recurso incrustado:
Muestra:
fuente
Sé que esto es antiguo, pero solo quería señalar NETMF (.Net MicroFramework), puede hacer esto fácilmente:
Como NETMF no tiene
GetManifestResourceStream
fuente
Después de leer todas las soluciones publicadas aquí. Así es como lo resolví:
fuente
La respuesta es bastante simple, simplemente haga esto si agregó el archivo directamente desde resources.resx.
Con esa línea de código, el texto del archivo se lee directamente del archivo y se coloca en la variable de cadena.
fuente
Me molestó que tuvieras que incluir siempre el espacio de nombres y la carpeta en la cadena. Quería simplificar el acceso a los recursos integrados. Por eso escribí esta pequeña clase. ¡Siéntase libre de usar y mejorar!
Uso:
Clase:
fuente
Algunos tipos de proyectos VS .NET no generan automáticamente un archivo .NET (.resx). Los siguientes pasos agregan un archivo de Recursos a su proyecto:
Resources
.Ahora puede agregar un archivo de texto como recurso, por ejemplo, un archivo xml:
Resources
tiene una propiedad de tipostring
que lleva el nombre del archivo incluido. Si el nombre del archivo es, por ejemplo, RibbonManifest.xml, la propiedad debe tener el nombreRibbonManifest
. Encontrará el nombre exacto en el archivo de código Resources.Designer.cs.string xml = Resources.RibbonManifest
. La forma general esResourceFileName.IncludedTextFileName
. No lo useResourceManager.GetString
ya que la función get de la propiedad string ya lo ha hecho.fuente
fuente
Esta es una clase que puede resultarle muy útil para leer archivos de recursos incrustados del actual
Assembly
:fuente
Para todas las personas que solo quieren rápidamente el texto de un archivo codificado en winforms;
Resources.<name of resource>.toString();
para leer el archivo.No recomendaría esto como práctica recomendada ni nada, pero funciona rápidamente y hace lo que debe hacer.
fuente
Para usuarios que usan VB.Net
donde
MyApplicationName
está el espacio de nombres de mi aplicación. No es el nombre del ensamblado. Este nombre se define en las propiedades del proyecto (pestaña Aplicación).Si no encuentra el nombre de recurso correcto, puede usar la
GetManifestResourceNames()
funcióno
o
fuente
Lea el archivo TXT incorporado en el evento de carga de formulario.
Establecer las variables dinámicamente.
Llame a un intento de captura.
Crear vacío para IncludeText (), Visual Studio lo hace por usted. Haga clic en la bombilla para generar automáticamente el CodeBlock.
Ponga lo siguiente dentro del bloque de código generado
Recurso 1
Recurso 2
Recurso 3
Si desea enviar la variable devuelta a otro lugar, simplemente llame a otra función y ...
Lo que esto logró fue esto, un método para combinar múltiples archivos txt y leer sus datos incrustados, dentro de un único cuadro de texto enriquecido. cual fue mi efecto deseado con esta muestra de Código.
fuente