Подтвердить что ты не робот

Что действительно делает свойство FileDialog.RestoreDirectory?

Я читал об этом свойстве на MSDN, но я до сих пор не понимаю, что он делает.

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

Что именно это означает? Что на самом деле "восстанавливает" текущий каталог? Спасибо за помощь.

4b9b3361

Ответ 1

IIRC, в Windows XP, когда вы нажимаете Save на SaveFileDialog (или Open на OpenFileDialog), каталог, в котором файл сохраняется (или открыт), устанавливается как новый текущий рабочий каталог (тот, что находится в Environment.CurrentDirectory).

Установив FileDialog.RestoreDirectory = true, при закрытии FileDialog восстанавливается исходный рабочий каталог.

В Windows Vista/Seven поведение всегда равно FileDialog.RestoreDirectory = true (да, даже если вы установите его на false...).

Ответ 2

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

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

Это было исправлено, поэтому он может сделать это для вас, но изменение поведения по умолчанию может привести к поломке кода, который зависит от quirk. Поэтому вам нужно включить его вручную с помощью этого свойства.

Ответ 3

Когда вы можете выбрать каталог при использовании диалогового окна, следующее использование диалога откроется в последнем использованном каталоге. С помощью этой опции будет восстановлен исходный каталог.

Ответ 4

Если он установлен в true, диалог файла всегда откроет путь по умолчанию по умолчанию (свойство InitialDirectory).

Ответ 5

Здесь я говорю только о WinForms FileDialog, WPF FileDialog может иметь другое поведение.

Для Win XP текущий каталог изменяется во время использования диалога.

Для многопоточного приложения это должно быть известно. Легко доказать, запустив цикл в новом потоке, чтобы проверить, изменяется ли текущий каталог во время использования диалога при переходе в другую папку.

Для Win 7/mono текущий каталог не изменяется во время или после использования диалога.

Поэтому свойство Win 7/mono: RestoreDirectory не требуется.