Leer archivos de una carpeta presente en el proyecto

87

Tengo un proyecto de C # (aplicación de consola de Windows). He creado una carpeta llamada Datos dentro del proyecto. Hay dos archivos de texto dentro de la carpeta Datos.

¿Cómo puedo leer los archivos de texto de la carpeta "Datos"? Intenté debajo de las cosas.

string[] files = File.ReadAllLines(@"Data\Names.txt")

Es un error de thowing que el archivo no se encuentra.

He revisado algunas respuestas de Stackoverflow publicadas antes y ninguna de ellas funciona para mí.

¿Cómo puedo proceder? ¡Gracias!

SKJ
fuente
1
Google "directorio actual". ¡El ejecutable no se ejecuta necesariamente desde su carpeta de código fuente!
Ondrej Tucny
¿Está copiando esta carpeta de datos en la salida al crear el proyecto? Verifique las opciones en los archivos y corríjalas.
ryadavilli
la configuración es Copiar siempre al directorio de salida.
SKJ

Respuestas:

122

el siguiente código debería funcionar:

string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"Data\Names.txt");
string[] files = File.ReadAllLines(path);
Morbia
fuente
Mi carpeta y mis archivos no existen en la carpeta de ensamblaje: s .. ¿Por qué?
bohem.be
33
en Visual Studio, marque el archivo y luego configúrelo Build Actionen Contenty Copy to Output DirectoryenCopy always
Florian Moser
3
Simplemente use @ "Data \ Name.txt" aplicando la notación @FlorianMoser
Alexandr Sargsyan
¿Para qué significa eso '@'?
gumuruh
@ se llama literal de cadena literal, consulte stackoverflow.com/questions/3311988/…
Morbia
34

depende de dónde esté tu carpeta de datos

Para obtener el directorio donde está el archivo .exe:

AppDomain.CurrentDomain.BaseDirectory

Para obtener el directorio actual:

Environment.CurrentDirectory

Luego puede concatenar la ruta de su directorio ( @"\Data\Names.txt")

Massimiliano Peluso
fuente
18

Si necesita obtener todos los archivos en la carpeta llamada 'Datos', codifíquelos como se muestra a continuación

string[] Documents = System.IO.Directory.GetFiles("../../Data/");

Ahora los 'Documentos' consisten en una matriz de nombre de objeto completo de dos archivos de texto en la carpeta 'Datos' 'Datos'.

Uthistran Selvaraj
fuente
@Bunyip: ¿necesita leer el contenido del archivo de texto o simplemente conocer los archivos en la carpeta?
Uthistran Selvaraj
13

Tengo un proyecto de C # (aplicación de consola de Windows). He creado una carpeta llamada Imágenes dentro del proyecto. Hay un archivo ico llamado MyIcon.ico. Accedí a MyIcon.ico dentro de la carpeta Imágenes como se muestra a continuación.

this.Icon = new Icon(@"../../Images/MyIcon.ico");
Ziggler
fuente
9

Copiar siempre al directorio de salida está configurado y luego intente lo siguiente:

 Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
 String Root = Directory.GetCurrentDirectory();
Rickey
fuente
Esta debería ser la respuesta aceptada: es sólida si el archivo está en una biblioteca o en el proyecto ejecutable.
Tullochgorum
0

Para Xamarin.iOS, puede usar el siguiente código para obtener el contenido del archivo si el archivo existe.

var documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var filename = Path.Combine(documents, "xyz.json");
if (File.Exists(filename))
{
var text =System.IO.File.ReadAllText(filename);
}
Pranav Raikundalia
fuente
-1

Use este Código para leer todos los archivos en carpetas y subcarpetas también

class Program
{
    static void Main(string[] args)
    {

        getfiles get = new getfiles();
        List<string> files =  get.GetAllFiles(@"D:\Document");

        foreach(string f in files)
        {
            Console.WriteLine(f);
        }


        Console.Read();
    }


}

class getfiles
{
    public List<string> GetAllFiles(string sDirt)
    {
        List<string> files = new List<string>();

        try
        {
            foreach (string file in Directory.GetFiles(sDirt))
            {
                files.Add(file);
            }
            foreach (string fl in Directory.GetDirectories(sDirt))
            {
                files.AddRange(GetAllFiles(fl));
            }
        }
        catch (Exception ex)
        {

            Console.WriteLine(ex.Message);
        }



        return files;
    }
}
Ris
fuente
-1
string myFile= File.ReadAllLines(Application.StartupPath.ToString() + @"..\..\..\Data\myTxtFile.txt")
Ahmed Abdel Moneem
fuente
3
Agregue un texto que detalle por qué esto funciona / qué hace
Gibolt
1
Si bien esto podría responder a la pregunta de los autores, carece de algunas palabras explicativas y / o enlaces a la documentación. Los fragmentos de código sin formato no son muy útiles sin algunas frases a su alrededor. También puede resultarle muy útil cómo escribir una buena respuesta . Por favor, editar su respuesta - De la opinión
Nick
-1

Usa esto, está funcionando.

string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"TestData\test.json");
var response = JsonConvert.DeserializeObject<Response>(File.ReadAllText(path));

Tenga en cuenta: debe asegurarse de establecer las propiedades del archivo test.jsoncomo

"Build Action" = "Contenido"

"Copy to Output Directory" = "Copiar siempre"

Satish Babu
fuente
Al responder una pregunta anterior, su respuesta sería mucho más útil para otros usuarios de StackOverflow si incluyera algún contexto para explicar cómo ayuda su respuesta, particularmente para una pregunta que ya tiene una respuesta aceptada. Ver: ¿Cómo escribo una buena respuesta ?
David Buck
-2

Esto fue útil para mí, si usa el

var dir = Directory.GetCurrentDirectory()

el relleno de la ruta estará más allá de la carpeta actual, incluirá esta ruta \ bin \ debug Lo que te recomiendo es que puedas usar el

string dir = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.FullName

luego imprima el valor de dir y verifique que la ruta le está dando

Josue Augusto Ramirez
fuente