Почему OpenFileDialog меняет мой рабочий каталог?

StackOverflow https://stackoverflow.com/questions/930816

  •  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);
        }

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