./ меняет цель, когда я использую OpenFileDialog
-
21-08-2019 - |
Вопрос
Я использую стримрайтер для регистрации ошибок
способ его разработки (пожалуйста, не спрашивайте, почему) заключается в открытии нового средства записи потоков каждый раз, когда приложению необходимо зарегистрировать сообщение.Он выводит все в ./Logs/[current-date].txt, который обычно разрешается в «c:\myappfolder\logs[current-date].txt»
Все работает правильно, но после того, как я использую диалоговое окно открытия файла и говорю: «C:\home\myfolder\myfile», потоковый автор пытается записать в «c:\home\myfolder\logs[current-date].txt»
Я знаю решения этой проблемы, но я просто не понимаю, что происходит.
Решение
Текущий каталог является значением всего процесса.
А OpenFileDialog
меняет текущий каталог.
Если вы используете .NET OpenFileDialog
класс, вы можете установить RestoreDirectory
собственность true
чтобы сообщить диалоговому окну оставить текущий каталог в покое (хотя в документации для RestoreDirectory
написано, что могут возникнуть некоторые проблемы с потоками, которые, как я полагаю, могут сделать это все еще непригодным для средства ведения журнала).
Другие советы
Как сказал Майк Б., OpenFileDialog
может изменить текущий каталог.С ./
относительно тока, это тоже меняется.
А RestoreDirectory
свойство изменяет это поведение.
Лучше сделайте что-то вроде этого:
OpenFileDialog openFileDialog1 = new OpenFileDialog();
OpenFileDialog1.InitialDirectory = "c:\\" ;
openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
openFileDialog1.FilterIndex = 2 ;
openFileDialog1.RestoreDirectory = true ;
Взято из MSDN.
Майк Б. абсолютно правильно.
Если вы используете собственный API, а не .NET, вам необходимо установить параметр OFN_NOCHANGEDIR в структуре OPENFILENAME.В документации указано, что это не работает для Windows XP, но не уверен, относится ли это к версии .NET или нет.
Независимо от того, как вы это исправите, имейте в виду, что каждый раз, когда открывается диалоговое окно с файлом, оно открывается обратно в исходную папку.Если вы откроете много файлов, лекарство может оказаться хуже самой болезни.Возможно, вам будет лучше получить текущий каталог при запуске программы и добавить его к именам файлов.