Почему OpenFileDialog меняет мой рабочий каталог? - PullRequest
15 голосов
/ 31 мая 2009

Почему OpenFileDialog меняет мой рабочий каталог? Должен ли я считать, что многие функции в System.Windows.Forms меняют мой рабочий каталог?

    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

Ответы [ 5 ]

19 голосов
/ 09 октября 2009

Или вы можете заставить это не делать этого. См. Свойство FileDialog.RestoreDirectory .

9 голосов
/ 06 июля 2011

В текущем проекте мы обнаружили, что OpenFileDialog больше не изменяет текущий каталог, что делает свойство .RestoreDirectory устаревшим. Код в приложении используется для изменения текущей директории всякий раз, когда мы открываем файл (при работе в Windows XP). Он больше не делает этого в Windows 7. В результате он сломал наше приложение, потому что теперь наш набор данных не знает, в каком каталоге находится файл, когда мы пытаемся десериализовать его, используя имя файла без полного пути. Просто предостережение, если вы планируете перейти на Windows 7.

7 голосов
/ 31 мая 2009

Это боль, хотя в некотором смысле вы можете предвидеть это ... если вы заходите в открытый диалог несколько раз (в приложении), вы часто находите его там, где последний раз его оставляли.

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

6 голосов
/ 31 мая 2009

Текущий рабочий каталог может меняться во время выполнения, да.

Рассмотрите возможность использования

Directory.GetParent(Assembly.GetExecutingAssembly().Location)

или

System.AppDomain.CurrentDomain.BaseDirectory

когда вам нужен каталог приложений.

0 голосов
/ 01 июля 2016

Почему в 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);
        }

    }
...