Вопрос

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

способ его разработки (пожалуйста, не спрашивайте, почему) заключается в открытии нового средства записи потоков каждый раз, когда приложению необходимо зарегистрировать сообщение.Он выводит все в ./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 или нет.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top