Lire des fichiers à partir d'un dossier présent dans le projet

87

J'ai un projet C # (Windows Console Application). J'ai créé un dossier nommé Data inside project. Il y a deux fichiers texte dans le dossier Data.

Comment puis-je lire les fichiers texte du dossier "Données". J'ai essayé les choses ci-dessous.

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

C'est une erreur que le fichier n'a pas trouvé.

J'ai vérifié certaines réponses de Stackoverflow publiées auparavant et aucune de ces réponses ne fonctionne pour moi.

Comment puis-je procéder? Merci!

SKJ
la source
1
Google "répertoire actuel". L'exécutable ne s'exécute pas nécessairement à partir de votre dossier de code source!
Ondrej Tucny
Copiez-vous ce dossier de données dans la sortie lors de la création du projet? Vérifiez les options sur les fichiers et corrigez-les.
ryadavilli
le paramètre est Copier toujours dans le répertoire de sortie.
SKJ

Réponses:

122

le code ci-dessous devrait fonctionner:

string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"Data\Names.txt");
string[] files = File.ReadAllLines(path);
Morbia
la source
Mon dossier et mes fichiers n'existent pas dans le dossier d'assemblage: s .. Pourquoi?
bohem.be
33
dans Visual Studio, marquez le fichier, puis définissez-le Build Actionsur Contentet Copy to Output DirectorysurCopy always
Florian Moser
3
Utilisez simplement @ "Data \ Name.txt" en appliquant la notation @FlorianMoser
Alexandr Sargsyan
à quoi ça sert «@»?
gumuruh le
@ il est appelé littéral de chaîne verbatim, voir stackoverflow.com/questions/3311988/…
Morbia
34

cela dépend où se trouve votre dossier Data

Pour obtenir le répertoire où se trouve le fichier .exe:

AppDomain.CurrentDomain.BaseDirectory

Pour obtenir le répertoire courant:

Environment.CurrentDirectory

Ensuite, vous pouvez concaténer votre chemin de répertoire ( @"\Data\Names.txt")

Massimiliano Peluso
la source
18

Si vous avez besoin d'obtenir tous les fichiers dans le dossier nommé 'Data', codez-le simplement comme ci-dessous

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

Maintenant, le «Documents» se compose d'un tableau de nom d'objet complet de deux fichiers texte dans le dossier «Données» «Données».

Uthistran Selvaraj
la source
@Bunyip: avez-vous besoin de lire le contenu du fichier texte ou simplement de connaître les fichiers du dossier?
Uthistran Selvaraj
13

J'ai un projet C # (Windows Console Application). J'ai créé un dossier nommé Images à l'intérieur du projet. Il existe un fichier ico appelé MyIcon.ico. J'ai accédé à MyIcon.ico dans le dossier Images comme ci-dessous.

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

Copy Always to output directory est défini, puis essayez ce qui suit:

 Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
 String Root = Directory.GetCurrentDirectory();
Rickey
la source
Cela devrait être la réponse acceptée - elle est robuste que le fichier se trouve dans une bibliothèque ou dans le projet exécutable.
Tullochgorum
0

Pour Xamarin.iOS, vous pouvez utiliser le code suivant pour obtenir le contenu du fichier s'il 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
la source
-1

Utilisez ce code pour lire tous les fichiers dans le dossier et les sous-dossiers également

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
la source
-1
string myFile= File.ReadAllLines(Application.StartupPath.ToString() + @"..\..\..\Data\myTxtFile.txt")
Ahmed Abdel Moneem
la source
3
Veuillez ajouter un texte expliquant pourquoi cela fonctionne / ce que cela fait
Gibolt
1
Bien que cela puisse répondre à la question des auteurs, il manque des mots explicatifs et / ou des liens vers la documentation. Les extraits de code bruts ne sont pas très utiles sans quelques phrases autour d'eux. Vous pouvez également trouver comment rédiger une bonne réponse très utile. Veuillez modifier votre réponse - De l'avis
Nick
-1

Utilisez ceci, ça marche.

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

Remarque: vous devez vous assurer que définir les propriétés du fichier test.jsoncomme

"Build Action" = "Contenu"

"Copy to Output Directory" = "Copier toujours"

Satish Babu
la source
Lorsque vous répondez à une ancienne question, votre réponse serait beaucoup plus utile aux autres utilisateurs de StackOverflow si vous incluiez un contexte pour expliquer comment votre réponse aide, en particulier pour une question qui a déjà une réponse acceptée. Voir: Comment écrire une bonne réponse .
David Buck le
-2

Cela m'a été utile, si vous utilisez le

var dir = Directory.GetCurrentDirectory()

le chemin de remplissage se trouve au-delà du dossier actuel, il inclura ce chemin \ bin \ debug Ce que je vous recommande, c'est que vous pouvez utiliser le

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

puis imprimez la valeur dir et vérifiez que le chemin vous donne

Josue Augusto Ramirez
la source