C#: ошибка при сохранении изображения в папку "Документы"

У меня есть изображение, отображаемое в моей форме C#. Когда пользователь нажимает кнопку "Сохранить изображение", появляется всплывающее окно ввода Visual Basic. Я пытаюсь добавить функциональность в мою форму, которая позволяет пользователю сохранять изображение, когда они вводят имя изображения через поле ввода Visual Basic.

Сначала я добавил этот код,

private void save_image(object sender, EventArgs e)
    {
        String picname;
        picname = Interaction.InputBox("Please enter a name for your Image");            
        pictureBit.Save("C:\\"+picname+".Png");                      
        MessageBox.Show(picname +" saved in Documents folder");
    } 

Однако, когда я запускаю программу и нажимаю кнопку "Сохранить", она выдает следующее исключение: "Необработанное исключение типа" System.Runtime.InteropServices.ExternalException "произошло в System.Drawing.dll".

Затем я добавил несколько изменений в код, чтобы он выглядел так,

private void save_image(object sender, EventArgs e)
    {

        SaveFileDialog savefile = new SaveFileDialog();            
        String picname;           
        picname = Interaction.InputBox("Please enter a name for your Image");
        savefile.FileName = picname + ".png";
        String path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        using (Stream s = File.Open(savefile.FileName, FileMode.Create))
        {
            pictureBit.Save(s, ImageFormat.Png);
        }
        //pictureBit.Save("C:\\pic.Png");           
        MessageBox.Show(picname);                                
    }

Когда я запускаю этот код, он больше не дает исключения, но сохраняет изображение в моей папке C#->bin->debug. Я знаю, что это может быть не идеальный способ сделать это, но как мне установить его путь, чтобы он сохранял изображение в папке документов.

2 ответа

Решение
String path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
savefile.FileName = path + "\\" + picname + ".png";

Другой рабочий пример с диалогом показа:

SaveFileDialog savefile = new SaveFileDialog();
String path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

savefile.InitialDirectory = path;
savefile.FileName = "picname";
savefile.Filter = "PNG images|*.png";
savefile.Title = "Save as...";
savefile.OverwritePrompt = true;

if (savefile.ShowDialog() == DialogResult.OK)
{
    Stream s = File.Open(savefile.FileName, FileMode.Create);
    pictureBit.Save(s,ImageFormat.Png);
    s.Close();
}

Другой пример сохранения:

if (savefile.ShowDialog() == DialogResult.OK)
{
    pictureBit.Save(savefile.FileName,ImageFormat.Png);
}

Вы не устанавливаете путь, см. MSDN для получения дополнительной информации.

Другие вопросы по тегам