./ меняет цель, когда я использую OpenFileDialog

Я использую потоковую запись для регистрации ошибок

способ, которым это было разработано (пожалуйста, не спрашивайте, почему), состоит в том, чтобы открывать новый потоковый редактор каждый раз, когда приложение регистрирует сообщение. Он выводит все в ./Logs/[current-date].txt, который обычно разрешается в "c: \ myappfolder \ logs [current-date] .txt"

Все работает правильно, но после того, как я использую диалог открытия файла, чтобы сказать: "C: \ home \ myfolder \ myfile", потоковая запись пытается записать в "c: \ home \ myfolder \ logs [current-date] .txt"

Я знаю решения этой проблемы, но я просто не понимаю, что происходит

15.12.2008 19:54:10
Он каждый раз открывает новую потоковую запись, потому что в противном случае файл будет заблокирован все время работы вашего приложения.
Joel Coehoorn 15.12.2008 20:00:59
3 ОТВЕТА
РЕШЕНИЕ

Текущий каталог является значением процесса в целом.

OpenFileDialogИзменяет текущий каталог.

Если вы используете OpenFileDialogкласс .NET , вы можете установить RestoreDirectoryсвойство так, trueчтобы диалоговое окно оставляло текущий каталог в покое (хотя при RestoreDirectoryнаписании документов для этого могут возникнуть некоторые проблемы с многопоточностью, которые, я думаю, могут сделать это по-прежнему неуместным). для лесозаготовительных объектов).

9
15.12.2008 20:02:51
Хороший вопрос относительно проблем с ветками. Я предполагаю, что для целей ведения журнала этот каталог фиксируется для каждого запуска. Сохранение этого в переменную из, вероятно, является хитростью.
biozinc 15.12.2008 20:06:03

Как сказал Майк Б, OpenFileDialogможет смениться текущий каталог. Так ./как относительно текущего, это тоже меняется.

RestoreDirectoryСвойство изменяет это поведение.

Сделайте что-то вроде этого скорее:

OpenFileDialog openFileDialog1 = new OpenFileDialog();

OpenFileDialog1.InitialDirectory = "c:\\" ;
openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
openFileDialog1.FilterIndex = 2 ;
openFileDialog1.RestoreDirectory = true ;

Взято из MSDN .

3
15.12.2008 20:02:17

Майк Б абсолютно прав.

Если вы используете собственный API, а не .NET, вам необходимо установить опцию OFN_NOCHANGEDIR в структуре OPENFILENAME. В документации говорится, что она не работает для Windows XP, но не уверен, относится ли это к версии .NET или нет.

Независимо от того, как вы это исправите, имейте в виду, что каждый раз, когда открывается диалоговое окно файла, он снова открывается в исходной папке. Если вы откроете много файлов, лечение может быть хуже, чем болезнь. Возможно, вам лучше получить текущий каталог при запуске программы и добавить его к вашим именам файлов.

2
23.05.2017 11:55:45
Помогает ли установка InitialDirectory по этому поводу? Я не могу вспомнить Я полагаю, что понятие текущего каталога немного устарело за пределами программ командной строки.
biozinc 15.12.2008 20:10:44
Настройка InitialDirectory будет указывать, какой каталог будет открыт при появлении диалогового окна, но я не уверен, сможете ли вы получить правильное значение для подключения к нему при использовании параметра восстановления каталога.
Mark Ransom 15.12.2008 20:40:09