saveFileDialog не меняет каталог
Всем привет, Вызываю saveFileDialog, он открывается в каталоге запуска программы, я хожу по другим каталогам, выбираю, в какой сохранить, сохраняю - но файл все равно оказывается в начальном каталоге. Как его заставить сохранять в выбранный мной каталог?
Ответы (2 шт):
Вам нужно где-то хранить путь. Пусть будет string CurrentPath. После создания saveFileDialog1 запишите в InitialDirectory этот путь. Первый раз будет пустая строка.
saveFileDialog1.InitialDirectory = CurrentPath;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
-- какой-то ваш код--
CurrentPath = Path.GetDirectoryName(saveFileDialog1.FileName);
}
Теперь будет открываться последний каталог, который открывали.
Для примера возьмем Net 7, WinForms приложение и добавим туда 1 кнопку для сохранения.
Выбор имени файла и его расширение действительно происходит через SaveFileDialog.
При нажатии на кнопку будем показывать пользователю окно выбора пути и дадим ему возможность назвать файл так, как ему нужно.
private void saveButton_Click(object sender, EventArgs e)
{
using var sfd = new SaveFileDialog();
var showResult = sfd.ShowDialog();
if (showResult != DialogResult.OK)
{
return; //Пользователь закрыл окно сохранения или отменил операцию
}
var selectedPath = sfd.FileName;
File.WriteAllText(selectedPath, "Hello, Stack!");
MessageBox.Show($"Файл сохранен: {selectedPath}");
}
Обратите внимание, что ShowDialog вернет DialogResult, результат которого мы хотим видеть как DialogResult.Ok, остальные операции (пользователь закрыл окно на крестик, нажал кнопку "Отмена" и пр.) нас не интересуют и мы можем их не обрабатывать.
В итоге выбранный путь пользователя будет находиться в переменной FileName (обратите внимание, что есть еще FileNames, куда указываются имена нескольких файлов, если у вас предусмотрено сохранение сразу нескольких файлов).