Quiero leer la primera línea de un archivo de texto que agregué al directorio raíz de mi proyecto. Es decir, mi explorador de soluciones muestra el archivo .txt junto con mis archivos .cs en mi proyecto.
Entonces, traté de hacer:
TextReader tr = new StreamReader(@"myfile.txt");
string myText = tr.ReadLine();
Pero esto no funciona ya que se refiere a la carpeta Bin y mi archivo no está ahí ... ¿Cómo puedo hacer que esto funcione? : /
Gracias
Respuestas:
Desde el Explorador de soluciones, haga clic derecho en myfile.txt y elija "Propiedades"
A partir de ahí, establecer la
Build Action
acontent
yCopy to Output Directory
a cualquieraCopy always
oCopy if newer
fuente
Embedded Resource
y lea el artículo sobre cómo leer el recurso emebedded blogs.msdn.com/b/nikola/archive/2008/05/14/…Puede utilizar lo siguiente para obtener el directorio raíz de un proyecto de sitio web:
String FilePath; FilePath = Server.MapPath("/MyWebSite");
O puede obtener el directorio base así:
fuente
Agregue un archivo de recursos a su proyecto (haga clic derecho en Proyecto-> Propiedades-> Recursos). Donde dice "cadenas", puede cambiar a "archivos". Elija "Agregar recurso" y seleccione su archivo.
Ahora puede hacer referencia a su archivo a través de la
Properties.Resources
colección.fuente
private string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);
El método anterior le traerá algo como esto:
"C:\Users\myuser\Documents\Visual Studio 2015\Projects\myProjectNamespace\bin\Debug"
Desde aquí puede navegar hacia atrás usando System.IO.Directory.GetParent:
1 vez lo llevará a \ bin, 2 veces lo llevará a \ myProjectNamespace, por lo que sería así:
Bueno, ahora tiene algo como "C: \ Users \ myuser \ Documents \ Visual Studio 2015 \ Projects \ myProjectNamespace", así que simplemente adjunte la ruta final a su nombre de archivo, por ejemplo:
_filePath += @"\myfile.txt"; TextReader tr = new StreamReader(_filePath);
Espero eso ayude.
fuente
También puede tenerlo incrustado (acción de compilación configurada en
Resource
), así es como se puede recuperar desde allí:private static UnmanagedMemoryStream GetResourceStream(string resName) { var assembly = Assembly.GetExecutingAssembly(); var strResources = assembly.GetName().Name + ".g.resources"; var rStream = assembly.GetManifestResourceStream(strResources); var resourceReader = new ResourceReader(rStream); var items = resourceReader.OfType<DictionaryEntry>(); var stream = items.First(x => (x.Key as string) == resName.ToLower()).Value; return (UnmanagedMemoryStream)stream; } private void Button1_Click(object sender, RoutedEventArgs e) { string resName = "Test.txt"; var file = GetResourceStream(resName); using (var reader = new StreamReader(file)) { var line = reader.ReadLine(); MessageBox.Show(line); } }
(Algún código tomado de esta respuesta por Charles )
fuente
Tienes que usar la ruta absoluta en este caso. Pero si configura el
CopyToOutputDirectory = CopyAlways
, funcionará mientras lo hace.fuente
En este código accedes al
root
directorio del proyecto:string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);
entonces:
StreamReader r = new StreamReader(_filePath + "/cities2.json"))
fuente