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
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
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
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.
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.
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 )
Vous devez utiliser le chemin absolu dans ce cas. Mais si vous définissez la CopyToOutputDirectory = CopyAlways
, cela fonctionnera comme vous le faites.