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.