Leggi i file da una cartella presente nel progetto


90

Ho un progetto C # (applicazione console Windows). Ho creato una cartella denominata Data all'interno del progetto. Ci sono due file di testo all'interno della cartella Data.

Come posso leggere i file di testo dalla cartella "Dati". Ho provato sotto le cose.

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

È l'errore che il file non è stato trovato.

Ho controllato alcune risposte Stackoverflow pubblicate in precedenza e nessuna di queste funziona per me.

Come posso procedere? Grazie!


1
Google "directory corrente". L'eseguibile non viene necessariamente eseguito dalla cartella del codice sorgente!
Ondrej Tucny

Copi questa cartella di dati nell'output durante la creazione del progetto? Controlla le opzioni sui file e correggili.
Ravi Y

l'impostazione è Copia sempre nella directory di output.
SKJ

Risposte:


128

il codice seguente dovrebbe funzionare:

string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"Data\Names.txt");
string[] files = File.ReadAllLines(path);

La mia cartella e i miei file non esistono nella cartella dell'assembly: s .. Perché?
bohem.be

33
in Visual Studio, contrassegnare il file e quindi impostare Build Actionsu Contente Copy to Output DirectorysuCopy always
Florian Moser

3
Basta usare @ "Data \ Name.txt" applicando la notazione @FlorianMoser
Alexandr Sargsyan

cosa significa "@"?
gumuruh

@ Ci si chiama testualmente stringa letterale, vedere stackoverflow.com/questions/3311988/...
Morbia

34

dipende da dove si trova la cartella dei dati

Per ottenere la directory in cui si trova il file .exe:

AppDomain.CurrentDomain.BaseDirectory

Per ottenere la directory corrente:

Environment.CurrentDirectory

Quindi puoi concatenare il percorso della tua directory ( @"\Data\Names.txt")


18

Se è necessario ottenere tutti i file nella cartella denominata "Dati", codificarlo come di seguito

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

Ora i "Documenti" sono costituiti da un array del nome oggetto completo di due file di testo nella cartella "Dati" "Dati".


@Bunyip: hai bisogno di leggere il contenuto del file di testo o semplicemente di conoscere i file nella cartella?
Uthistran Selvaraj

13

Ho un progetto C # (applicazione console Windows). Ho creato una cartella denominata Immagini all'interno del progetto. C'è un file ico chiamato MyIcon.ico. Ho effettuato l'accesso a MyIcon.ico nella cartella Immagini come di seguito.

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

9

Copia sempre nella directory di output è impostata, quindi prova quanto segue:

 Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
 String Root = Directory.GetCurrentDirectory();

Questa dovrebbe essere la risposta accettata: è robusto se il file si trova in una libreria o nel progetto eseguibile.
Tullochgorum

1

Per Xamarin.iOS è possibile usare il codice seguente per ottenere il contenuto del file se il file esiste.

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

-1

Usa questo codice anche per leggere tutti i file nella cartella e nelle sottocartelle

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

-1
string myFile= File.ReadAllLines(Application.StartupPath.ToString() + @"..\..\..\Data\myTxtFile.txt")

3
Si prega di aggiungere del testo che spieghi perché funziona / cosa fa
Gibolt

1
Anche se questo potrebbe rispondere alla domanda degli autori, mancano alcune parole esplicative e / o collegamenti alla documentazione. Gli snippet di codice non elaborati non sono molto utili senza alcune frasi intorno ad essi. Potresti anche trovare molto utile come scrivere una buona risposta . Si prega di modificare la risposta - Dalla recensione
Nick

-2

Questo è stato utile per me, se usi il

var dir = Directory.GetCurrentDirectory()

il percorso di riempimento sarà oltre la cartella corrente, includerà questo percorso \ bin \ debug Quello che ti consiglio, è che puoi usare il

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

quindi stampa il valore dir e verifica che il percorso ti stia dando

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.