Почему OpenFileDialog меняет мой рабочий каталог?
-
06-09-2019 - |
Вопрос
Почему OpenFileDialog меняет мой рабочий каталог?Должен ли я предполагать множество функций в Системе.Windows.Формы изменят мой рабочий каталог?
OpenFileDialog open = new OpenFileDialog();
open.Filter = filter;
a = Directory.GetCurrentDirectory(); //<-- correct
if (open.ShowDialog() == DialogResult.OK) //-- select a file on my desktop
{
a = Directory.GetCurrentDirectory(); //<-- incorrect, is set to my desktop
Решение
Или вы можете заставить его этого не делать.Посмотрите на FileDialog.Восстановленный адрес собственность.
Другие советы
Что мы обнаружили в текущем проекте, так это то, что OpenFileDialog больше не изменяет текущий каталог, что делает property .RestoreDirectory устаревшим.Код в приложении использовался для изменения текущего каталога всякий раз, когда мы открывали файл (при запуске в Windows XP).Он больше не делает этого в Windows 7.В результате это сломало наше приложение, потому что теперь наш набор данных не знает, в каком каталоге находится файл, когда мы пытаемся десериализовать его, используя имя файла без полного пути.Просто небольшое предостережение, если вы планируете перейти на Windows 7.
Это боль, хотя в некотором смысле вы могли бы ее предвидеть...если вы заходите в открытое диалоговое окно несколько раз (в приложении), вы часто обнаруживаете его там, где вы его оставили в последний раз.
Если это повлияет на ваш код, вы могли бы сделать снимок GetCurrentDirectory()
перед входом в диалоговое окно и восстановите его впоследствии (чтобы ваш код не увидел изменений).Возможно, вы захотите сохранить пользователя работайте с каталогами отдельно (и меняйте их местами), чтобы пользователь также получал ожидаемое поведение.
Текущий рабочий каталог может изменяться во время выполнения, да.
Рассмотрите возможность использования
Directory.GetParent(Assembly.GetExecutingAssembly().Location)
или
System.AppDomain.CurrentDomain.BaseDirectory
когда вам понадобится каталог ваших приложений.
о том, почему в XP файловый каталог изменяет текущий каталог, лучше спросить MS .в любом случае диалоговое окно "Открыть файл" в XP имеет такое странное поведение, но в w7 или более поздней версии - нет.таким образом, вы можете просто установить текущий каталог после сохранения пути, выбранного в SaveFileDialog, чтобы он изменил текущий каталог.
Я публикую свой метод, где вы можете видеть, что выбранный путь сохраняется в настройках и сбрасывается текущий каталог
private void ShowSaveFileDialog(object sender, RoutedEventArgs e)
{
private const int xpVerMajorNumber = 5;
var saveFileDialog = new SaveFileDialog()
{
FileName = Settings.Default.ExcelFileName,
DefaultExt = "*.xlsx",
Filter = "Excel Workbook (.xlsx)|*.xlsx"
};
if (saveFileDialog.ShowDialog(this) == true)
Settings.Default.ExcelFileName = saveFileDialog.FileName;
if (Environment.OSVersion.Version.Major <= xpVerMajorNumber)
{
Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
}
}