web-dev-qa-db-fra.com

Comment lire un fichier texte dans le répertoire racine du projet?

Je veux lire la première ligne d'un fichier texte que j'ai ajouté au répertoire racine de mon projet. Cela signifie que ma solution Explorer affiche le fichier .txt à côté de mes fichiers .cs dans mon projet.

Alors j'ai essayé de faire:

TextReader tr = new StreamReader(@"myfile.txt");
string myText = tr.ReadLine();

Mais cela ne fonctionne pas car il fait référence au dossier Bin et que mon fichier n'y est pas ... Comment puis-je faire en sorte que cela fonctionne? : /

Merci

83
foreyez

Depuis l'Explorateur de solutions, cliquez avec le bouton droit sur myfile.txt et choisissez "Propriétés".

De là, définissez le Build Action à content et Copy to Output Directory soit Copy always ou Copy if newer

enter image description here

124
Sung M. Kim

Vous pouvez utiliser les éléments suivants pour obtenir le répertoire racine d’un projet de site Web:

String FilePath;
FilePath = Server.MapPath("/MyWebSite");

Ou vous pouvez obtenir le répertoire de base comme ceci:

AppDomain.CurrentDomain.BaseDirectory
33
Mangesh Pimpalkar

Ajoutez un fichier de ressources à votre projet (clic droit sur Projet-> Propriétés-> Ressources). Où il est dit "chaînes", vous pouvez passer à "fichiers". Choisissez "Ajouter une ressource" et sélectionnez votre fichier.

Vous pouvez maintenant référencer votre fichier via le Properties.Resources collection.

29
Ethan Cabiac
private string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);

La méthode ci-dessus vous apportera quelque chose comme ceci:

"C:\Users\myuser\Documents\Visual Studio 2015\Projects\myProjectNamespace\bin\Debug"

À partir de là, vous pouvez revenir en arrière en utilisant System.IO.Directory.GetParent:

_filePath = Directory.GetParent(_filePath).FullName;

Une fois, vous obtiendrez\bin, deux fois, vous irez à\myProjectNamespace, donc ce serait comme suit:

_filePath = Directory.GetParent(Directory.GetParent(_filePath).FullName).FullName;

Eh bien, maintenant vous avez quelque chose comme "C:\Utilisateurs\monutilisateur\Documents\Visual Studio 2015\Projets\monProjectNamespace", donc attachez simplement le chemin final à votre nomFichier, par exemple:

_filePath += @"\myfile.txt";
TextReader tr = new StreamReader(_filePath);

J'espère que ça aide.

12
Bruno Carvalho

Vous pouvez également l'avoir intégré (action de construction définie sur Resource), voici comment le récupérer à partir de cet emplacement:

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

(Un code pris de cette réponse par Charles )

11
H.B.

Vous devez utiliser le chemin absolu dans ce cas. Mais si vous définissez la CopyToOutputDirectory = CopyAlways, cela fonctionnera comme vous le faites.

3
Shuhel Ahmed