Я хочу прочитать первую строку текстового файла, который я добавил в корневой каталог моего проекта. Это означает, что мой обозреватель решений показывает файл .txt вместе с моими файлами .cs в моем проекте.
Итак, я попробовал сделать:
TextReader tr = new StreamReader(@"myfile.txt");
string myText = tr.ReadLine();
Но это не работает, потому что это относится к папке Bin, а моего файла там нет ... Как я могу заставить это работать? : /
Благодарность
Ответы:
В обозревателе решений щелкните правой кнопкой мыши файл myfile.txt и выберите «Свойства».
Оттуда установите
Build Action
дляcontent
иCopy to Output Directory
на либоCopy always
илиCopy if newer
источник
Embedded Resource
и прочтите статью о том, как читать расширенный ресурс blogs.msdn.com/b/nikola/archive/2008/05/14/…Вы можете использовать следующее для получения корневого каталога проекта веб-сайта:
String FilePath; FilePath = Server.MapPath("/MyWebSite");
Или вы можете получить базовый каталог так:
источник
Добавьте файл ресурсов в свой проект (щелкните правой кнопкой мыши Project-> Properties-> Resources). Там, где написано «строки», вы можете переключиться на «файлы». Выберите «Добавить ресурс» и выберите свой файл.
Теперь вы можете ссылаться на свой файл через
Properties.Resources
коллекцию.источник
private string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);
Приведенный выше метод даст вам что-то вроде этого:
"C:\Users\myuser\Documents\Visual Studio 2015\Projects\myProjectNamespace\bin\Debug"
Отсюда вы можете перемещаться назад, используя System.IO.Directory.GetParent:
1 раз приведет вас в \ bin, 2 раза вы попадете в \ myProjectNamespace, так что это будет примерно так:
Что ж, теперь у вас есть что-то вроде "C: \ Users \ myuser \ Documents \ Visual Studio 2015 \ Projects \ myProjectNamespace", поэтому просто прикрепите окончательный путь к вашему имени файла, например:
_filePath += @"\myfile.txt"; TextReader tr = new StreamReader(_filePath);
Надеюсь, это поможет.
источник
Вы также можете встроить его (установить действие сборки
Resource
), вот как получить его оттуда: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); } }
(Некоторый код взят из этого ответа от Charles )
источник
В этом случае вы должны использовать абсолютный путь. Но если вы установите
CopyToOutputDirectory = CopyAlways
, он будет работать так, как вы это делаете.источник
В этом коде вы получаете доступ к
root
проекту каталога:string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);
тогда:
StreamReader r = new StreamReader(_filePath + "/cities2.json"))
источник