tabuladores - Visual Studio 2012-C#: leer un archivo ''.txt'' de los recursos
leer y escribir archivo txt c# (1)
Estoy intentando acceder y leer un archivo de texto, ''achInfo.txt'' de mis recursos en Visual Studio. Algunas soluciones temporales ya se han enumerado en este sitio, pero ninguna de ellas parece funcionar para mí. Simplemente me dan uno de los dos errores, que explicaré más adelante.
Aquí está todo el método hasta ahora.
private string[] GetAchMetadata(short element)
{
string[] temp = { "", "" };
string cLine;
try
{
StreamReader sr = new StreamReader(Properties.Resources.achInfo);
while (!sr.EndOfStream)
{
cLine = sr.ReadLine();
if (Microsoft.VisualBasic.Information.IsNumeric(cLine))
{
if (int.Parse(cLine) == element)
{
temp[0] = cLine;
temp[1] = sr.ReadLine();
return temp;
}
}
}
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine("There was a problem in collecting data.");
System.Diagnostics.Debug.Write(e);
}
return temp;
}
Mi primera suposición fue usar Properties.Resources.achInfo
, ya que esto se refiere directamente al archivo en cuestión. Sin embargo, esto arroja un error System.ArgumentException
, con la descripción ''Caracteres no válidos en la ruta''.
Luego utilicé la solución de ensamblaje (''Grandma_Lair'' es mi espacio de nombres, no preguntes ''):
Assembly asm;
asm = Assembly.GetExecutingAssembly();
StreamReader sr = new StreamReader(asm.GetManifestResourceStream("Grandma_Lair.achInfo.txt"));
Pero esto arroja un System.ArgumentNullException
con el mensaje ''El valor no puede ser nulo''. También establecí el modificador de acceso en mis recursos en público, y me he asegurado de que el archivo esté configurado en un recurso incrustado.
¿Alguien tiene alguna idea sobre mi problema?
Su primera solución debería funcionar una vez que reemplace StreamReader
con StringReader
:
StringReader sr = new StringReader(Properties.Resources.achInfo);
El valor Properties.Resources.achInfo
representa el recurso que incrustó en su totalidad como una cadena, no como una ruta a ese recurso (de ahí el error de "caracteres no válidos en la ruta").
El método GetManifestResourceStream
debería funcionar también, pero debe darle al método la ruta correcta, que se basa, entre otras cosas, en el nombre del espacio de nombres predeterminado de su proyecto. Si agrega una llamada a assembly.GetManifestResourceNames()
antes de tratar de obtener su recurso, y busque la ortografía exacta de su nombre de recurso en el depurador, también podrá corregir el problema de excepción de puntero nulo.