Ответ 1
Из Обозревателя решений щелкните правой кнопкой мыши файл myfile.txt и выберите "Свойства"
Оттуда установите Build Action
в content
и Copy to Output Directory
на Copy always
или Copy if newer
Я хочу прочитать первую строку текстового файла, которую я добавил в корневую директорию моего проекта. Смысл, мой исследователь решений показывает файл .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
Для получения корневого каталога проекта веб-сайта вы можете использовать следующее:
String FilePath;
FilePath = Server.MapPath("/MyWebSite");
Или вы можете получить базовый каталог следующим образом:
AppDomain.CurrentDomain.BaseDirectory
Добавьте в проект файл ресурсов (щелкните правой кнопкой мыши Project- > Properties- > Resources). Где он говорит "строки", вы можете переключиться на "файлы". Выберите "Добавить ресурс" и выберите файл.
Теперь вы можете ссылаться на свой файл через коллекцию Properties.Resources
.
Вы можете встроить его (build action set to 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);
}
}
private string _filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);
В приведенном выше методе вы получите что-то вроде этого:
"C:\Users\myuser\Documents\Visual Studio 2015\Projects\myProjectNamespace\bin\Debug"
Отсюда вы можете перемещаться назад с помощью System.IO.Directory.GetParent:
_filePath = Directory.GetParent(_filePath).FullName;
1 раз вы попадете в \bin, 2 раза вы попадете в \myProjectNamespace, так что это будет так:
_filePath = Directory.GetParent(Directory.GetParent(_filePath).FullName).FullName;
Итак, теперь у вас есть что-то вроде "C:\Users\myuser\Documents\Visual Studio 2015\Projects\myProjectNamespace", поэтому просто присоедините конечный путь к файлуName, например:
_filePath += @"\myfile.txt";
TextReader tr = new StreamReader(_filePath);
Надеюсь, что это поможет.
В этом случае вы должны использовать абсолютный путь. Но если вы установите CopyToOutputDirectory = CopyAlways
, он будет работать так, как вы это делаете.