Папка в форме windows C#

Это мое первое приложение для Windows.

Мне нужно работать с папками, которые я создал в своем проекте, и мне нужно получить доступ к папке Data, в которую я помещаю файлы .txt.

Я попробую :

string fileName = @"Data\TextFile1.txt";
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName);

но я продолжаю получать эту ошибку:

impossible find part of path.

Как я могу объединить путь к папке с именем файла, чтобы после выпуска проекта все работало нормально?

Вот что я делаю в приложении asp.net:

Path.Combine(HttpRuntime.AppDomainAppPath, "Folder/FileName.txt");

Используйте отладчик, чтобы узнать, каково значение вашей переменной пути. Это не то, что вы ожидаете.

Steve 14.05.2018 15:38

Каталог создается при попытке доступа к файлу?

Julo 14.05.2018 15:39

Возвращение BaseDirectory: C: \ Users \ myname \ Documents \ Visual Studio 2015 \ Projects \ projectName \ projectName \ bin \ debug

MeJonata 14.05.2018 15:41

для хорошей работы мне нужен C: \ Users \ myname \ Documents \ Visual Studio 2015 \ Projects \ projectName \ projectName \ Data \ textfile, но как я могу это получить?

MeJonata 14.05.2018 15:42

Сохраните расположение папки данных в файле app.config в разделе AppSettings и прочтите его во время выполнения с помощью класса ConfigurationManager.AppSettings.

Steve 14.05.2018 15:46

Похоже, файла нет. В вашем проекте, если у вас есть файл в папке Data, щелкните файл правой кнопкой мыши и убедитесь, что для параметра Compile установлено значение Content, чтобы файл копировался в папку во время выполнения. Я согласен с приведенным выше комментарием, поместите точку останова в код, проверьте полный путь, который он получает, когда вы это сделаете, а затем проверьте, что файл и папка существуют в этом месте. Помните, что в проекте это будет bin / debug ... или bin / release .... В зависимости от того, работает ли это, ничего жестко запрограммированного, почти наверняка будет работать и при развертывании.

Michael Puckett II 14.05.2018 15:53

@MeJonata, Вы решили проблему тем, что предоставили решения людьми? если да, пожалуйста, примите, подумайте над ответом, если нет, сообщите нам, почему?

Aria 14.05.2018 16:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
1 752
4

Ответы 4

в C# .NET вы можете легко использовать свойства Среда при работе с формами.

Если вы хотите, например, путь Appdata делает это:

string MyPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\" + MyFileName;

Но убедитесь, что файл / путь существует! Для этого вы можете использовать Файл.Exists -Function:

if (File.Exists(MyPath))
{
//Do Something
}

(Для Файл-Class вам понадобится пространство имен System.IO!)

Обновлено:

Пример:

  string MyPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\MyConfig.txt";

if (File.Exists(MyPath))
{
 MessageBox.Show($"{MyPath} exists!");
}

Надеюсь, что это помогло;)

Подход Path.Combine лучше, в основном для переносимости.

Julo 14.05.2018 15:43

Зачем объединять путь вручную, если для этого есть Combine?

Aria 14.05.2018 15:45

Может быть, но если ему просто нужна поддержка Windows, это, ИМХО, самый простой способ.

user6921302 14.05.2018 15:45

Path.Combine всегда - более безопасный подход.

LarsTech 14.05.2018 15:48

Могу показать рабочий пример ... я пытаюсь, но получаю ошибку

MeJonata 14.05.2018 15:48

@Aria Не стесняйтесь отвечать по-своему, я просто всегда использую Environment, потому что это просто.

user6921302 14.05.2018 15:50

невозможно найти часть маршрута. я вижу в пути "\ bin \ debug" ... но мне нужно удалить ... я думаю

MeJonata 14.05.2018 15:53

@MeJonata superuser.com/questions/150012/…

user6921302 14.05.2018 15:58

Эта проблема заключается не в использовании Environment, а в том, что вы не используете Path.Combine.

LarsTech 14.05.2018 15:59

Смысл использования Environment - получить эти пути, не записывая их вручную в код. Если вы немного поработаете с этим, вы будете знать, как с этим бороться.

user6921302 14.05.2018 16:01

Если я правильно понимаю, вы пытаетесь прочитать какой-то файл, который вы добавили в свое решение в Visual Studio. Во-первых, чтобы эти файлы были «развернуты», щелкните их в обозревателе решений, перейдите в инструмент «Свойства» и посмотрите на «Копировать в выходной каталог». По умолчанию - «Не копировать». Измените этот параметр на «Копировать всегда» или «Копировать, если новее». Теперь ваши файлы будут скопированы в выходной каталог при построении решения. Затем, чтобы получить текущий путь сборки во время выполнения, посмотрите: Получение пути к текущей сборке

string path = (new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath;

из пути сборки вы можете получить путь к содержащей его папке, затем вы можете использовать Path.Combine (), чтобы получить желаемый путь к файлу.

Моя проблема проста ... у меня есть несколько классов с методом, которые читают поток, используя (FileStream stream = new FileStream (path, FileMode.Append, FileAccess.Write)) {

MeJonata 14.05.2018 16:04

Все работает хорошо, но путь такой String path = @ "C: \ Users \ me \ Documents \ Visual Studio 2015 \ Projects \ nameProj \ nameProj \ Data \ fileName.bin";

MeJonata 14.05.2018 16:06

на веб-сайте я просто делаю Path.Combine (HttpRuntime.AppDomainAppPath, "Folder / FileName.txt");

MeJonata 14.05.2018 16:06

что я должен сделать ?

MeJonata 14.05.2018 16:07

@MeJonata, ты почти у цели. Взгляните на ответ, который я опубликовал выше, они объясняют, как правильно получить текущий путь выполнения. Затем вы можете использовать некоторые служебные классы в пространстве имен System.IO, например FileInfo, DirectoryInfo, Path и File, и вы легко сможете читать и писать там, где вам нужно.

PSkalka 14.05.2018 16:23

Если возможно, я бы не создавал никаких путей внутри приложения. Платформа .NET предоставляет файл конфигурации приложения для такого рода проблем. Вам нужно просто добавить этот раздел в свой файл конфигурации (app.config при разработке, затем application.exe.config после компиляции)

<configuration>
  <appSettings>
    <add key = "mydatafolder" value = "e:\whateverpathyoulike"></add>
  </appSettings>
</configuration>

Затем во время выполнения прочитайте это значение из своего кода

string path = ConfigurationManager.AppSettings["mydatafolder"];
path = Path.Combine(path, fileName);

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

Ваши файлы данных должны быть доступны в выходной папке вместе с файлом .exe вашего приложения. для этого:

  1. Откройте свойства каждого файла в папке Data.
  2. Выберите Copy Always против Copy to output directory
  3. Затем создайте приложение

Это скопирует папку Data вместе со всеми файлами в папке Bin\Debug и будет работать с вашим существующим кодом.

Другие вопросы по теме