./ меняет цель, когда я использую OpenFileDialog - PullRequest
1 голос
/ 15 декабря 2008

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

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

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

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

Ответы [ 3 ]

9 голосов
/ 15 декабря 2008

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

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

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

3 голосов
/ 15 декабря 2008

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

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

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

OpenFileDialog openFileDialog1 = new OpenFileDialog();

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

Взято из MSDN .

2 голосов
/ 15 декабря 2008

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

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

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

...