Как найти файл в папке проекта в приложении windows form - PullRequest
1 голос
/ 14 июля 2020

У меня есть приложение windows form, и у меня есть несколько текстовых файлов в папке, как на изображении. Как я могу связаться с ними и прочитать эти файлы?

аппимейдж

Я также пробовал код ниже, но получил ошибку value cannot be null. parameter name stream

Assembly asm = Assembly.GetExecutingAssembly();
StreamReader reader = new StreamReader(asm.GetManifestResourceStream("NexoClientApp.JsonRequests.Login.txt"));
string jtext = reader.ReadToEnd();

Спасибо

Ответы [ 3 ]

0 голосов
/ 14 июля 2020

Если вы хотите, чтобы файлы были установлены как файлы в целевой системе, сохраняя структуру проекта, вам необходимо прочитать их как элементы диска и создать установочный или простой zip-архив, который копирует эти файлы для восстановления структуры проекта при необходимости.

Для их чтения, если исполняемый файл создается в папке bin, как по умолчанию для каждого проекта VS:

var lines = File.ReadAllLines(RootFolderPath + @"JsonRequests\Login.txt");

public string RootFolderPath
  = Directory.GetParent
    (
      Path.GetDirectoryName(Application.ExecutablePath.ToLower()
                            .Replace("\\bin\\debug\\", "\\bin\\")
                            .Replace("\\bin\\release\\", "\\bin\\"))
    ).FullName
  + Path.DirectorySeparatorChar;

Мы удаляем папку отладки или выпуска, чтобы получить проект / приложение root путь для возможности чтения желаемого файла.

Если двоичный файл создается в другой папке, используйте его. Если в самом root, используйте его как есть. Если вы измените папку сохранения для выпуска и отладки, адаптируйте ее.

В WinForms все методы получения пути к исполняемому файлу возвращают путь, имеющий по умолчанию debug или release ... но здесь нам нужен root путь к проекту или установленному приложению.

Здесь мы не устанавливаем копии файлов в исполняемую папку в обозревателе решений, но сохраняем структуру проекта на диске.

Вы также можете создать файл ресурсов для встраивания нужных файлов и использовать GetManifestResourceStream или использовать ответ @FalcoAlexander для копирования файлов в исполняемую папку и чтения оттуда.

0 голосов
/ 14 июля 2020
string dir = AppDomain.CurrentDomain.BaseDirectory;

//OR

string dir = Application.StartupPath;

string login = File.ReadAllText(dir+"/JsonRequests/Login.txt"); //read some file

//OR

List<FileInfo> files = new DirectoryInfo(dir).GetFiles().ToList(); //get all info about files in root dir
0 голосов
/ 14 июля 2020

обязательно копируйте файлы при сборке! См. Свойства ваших текстовых файлов, как в этом примере: (скопируйте, если более новые также будут работать нормально)

Варианты сборки VS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...