saveFileDialog не меняет каталог

Всем привет, Вызываю saveFileDialog, он открывается в каталоге запуска программы, я хожу по другим каталогам, выбираю, в какой сохранить, сохраняю - но файл все равно оказывается в начальном каталоге. Как его заставить сохранять в выбранный мной каталог?


Ответы (2 шт):

Автор решения: Tupelo Honey

Вам нужно где-то хранить путь. Пусть будет string CurrentPath. После создания saveFileDialog1 запишите в InitialDirectory этот путь. Первый раз будет пустая строка.

saveFileDialog1.InitialDirectory = CurrentPath;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
    -- какой-то ваш код--
    CurrentPath = Path.GetDirectoryName(saveFileDialog1.FileName);    
}

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

→ Ссылка
Автор решения: OwDafuq

Для примера возьмем 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, куда указываются имена нескольких файлов, если у вас предусмотрено сохранение сразу нескольких файлов).

→ Ссылка