SaveFileDialog RestoreDirectory не работает должным образом для %temp%

Я реализовал простое приложение Windows Forms. Я создаю простой SaveFileDialog и хочу восстановить каталог, когда снова создам этот объект. Однако это не работает для папки% temp%. Почему это так? Есть ли способ решить эту проблему? RestoreDirectory = true работает для любой другой папки, которую я пробовал.

SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.FileName = "newFile";
saveDialog.RestoreDirectory = true;

saveDialog.ShowDialog();

person Zygmuntix    schedule 12.04.2016    source источник
comment
Я думаю, что это проблема с разрешением, так как temp является системным каталогом   -  person NatarajC    schedule 12.04.2016
comment
Предполагая, что это не проблема с разрешением, возможно, вы могли бы рассмотреть возможность использования абсолютного пути? C:\Users\<username>\AppData\Local\Temp   -  person Ian    schedule 12.04.2016
comment
как насчет InitialDirectory вы пробовали этот подход? также я не вижу пути к файлу нигде в вашем коде... он сохраняет файл в исполняемой директории... что означает ваш каталог `bin\debug`?..? попробуйте прочитать документацию и примеры Класс MSDN SaveFileDialog   -  person MethodMan    schedule 12.04.2016
comment
Прочитайте здесь. Я думаю, что свойство делает что-то совершенно другое, чем то, что вы хотите. Вам нужно сохранить .FileName в глобальную переменную, затем при повторном создании объекта вам нужно установить .InitialDirectory в переменную, которую вы сохранили. Как вы планируете, чтобы объект new вообще запоминал состояние?   -  person Quantic    schedule 12.04.2016
comment
Я попытался использовать InitialDirectory. Однако это свойство объекта SaveFileDialog, и оно будет уничтожено при уничтожении этого объекта. И я хочу создавать и показывать новый SaveFileDialog каждый раз, когда пользователь нажимает кнопку. Путь к файлу должен быть сохранен автоматически, потому что я установил saveDialog.RestoreDirectory = true. Но это не так. Я думаю, что NatarajC может быть прав - это может быть проблема с разрешением.   -  person Zygmuntix    schedule 12.04.2016
comment
Это правда, что SaveFileDialog — это объект, который будет удален во время сборки мусора. Однако установка для RestoreDirectory значения true должна сохранить состояние как глобальное. Читайте здесь: ссылка   -  person Zygmuntix    schedule 12.04.2016
comment
Вы почти наверняка неверно интерпретируете происходящее. Если вы не установите свойство InitialDirectory, диалоговое окно откроется там, где пользователь в последний раз перемещался. Поэтому, если в первый раз вы перейдете к TEMP, то во второй раз он снова откроется в TEMP. Просто потому, что вспомнил, а не потому, что Environment.CurrentDirectory не был восстановлен. Фича, а не баг.   -  person Hans Passant    schedule 12.04.2016
comment
Хорошо, вы правы, свойство RestoreDirectory в конечном итоге сохраняет каталог в реестре. Тема восьмилетней давности здесь упоминает об этом, но в моей системе, по-видимому, все изменилось до Windows 7. Я не могу заставить его сохранить% temp % каталог либо.   -  person Quantic    schedule 12.04.2016
comment
@HansPassant Ах, тот самый человек в треде, на который я ссылался ... Это не работает в моей системе Windows 7. Я могу перейти, например, к C:\test и что-то сохранить, закрыть программу, снова открыть программу, и она снова откроет эту папку. Но при перемещении по C:\Users\myName\AppData\Local\Temp, сохранении чего-либо, а затем повторном открытии программы просто снова открывается C:\test — или любая неспециальная папка, которую я выбираю, но не временный каталог, в который расширяется %temp%.   -  person Quantic    schedule 12.04.2016
comment
@Hans Passant Моя цель - открыть диалоговое окно, где пользователь в последний раз перемещался. Вы написали Итак, если в первый раз вы перейдете в TEMP, то во второй раз он снова откроется в TEMP.. Это не так, попробуйте сохранить файл там самостоятельно. Когда я сохраняю файл в папку Temp - в следующий раз, когда я открываю диалоговое окно сохранения файла, он не открывается в последней папке, к которой я перешел.   -  person Zygmuntix    schedule 13.04.2016


Ответы (1)


Raghunathan S опубликовал здесь рабочее решение этой проблемы: -work-perly-for-temp?forum=csharpgeneral" rel="nofollow">https://social.msdn.microsoft.com/Forums/vstudio/en-US/2b720c00-6952-4705-a646-8f5469fd93b1/savefiledialog -restoredirectory-не работает-для-temp?forum=csharpgeneral

person Zygmuntix    schedule 15.04.2016