Permission problem with bitmap.Save()

2019-09-05 14:31发布

问题:

I have this simple code:


System.Drawing.Bitmap bm = bitmapSourceToBitmap(source);
try
            {
                bm.Save(@"C:\Seva\testeImagem.jpg");
            }
            catch (Exception ex)
            {

            }

This throws: Generic Error GDI+. Anyway, I seached and people say that the problem is with permissions. How can I give permissions to it? Thanks

回答1:

First find out under what credentials the code is running.

Then check (and, when needed, fix) the security/NTFS settings of the Seva folder.

Especially when this code is running from within a website or service the account will not have permissions to write to the folder.



回答2:

instead of saving to C:\Seva\testeImagem.jpg why not try saving to

Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), 
             "testeImagem.jpg");

You must ensure that the Seva folder exists under C:\ and ensure that the current user has permissions to write to\create this folder. Also, its considered bad practice to write to folders that the user doesn't own. If the user is Running As A Normal User (not an admin) failure to do so results in permission exceptions.



回答3:

Could you test if the folder exists?

void BitmapCopy(System.Drawing.Bitmap source, string filename) {
  if (!String.IsNullOrEmpty(filename) && (source != null)) {
    string dirName = @"C:\Seva";
    if (!System.IO.Directory.Exists(dirName)) {
      dirName = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    }
    string bmpFile = System.IO.Path.Combine(dirName, filename);
    System.Drawing.Bitmap bm = bitmapSourceToBitmap(source);
    try {
      bm.Save(bmpFile);
    } catch (ArgumentNullException ex) {
      Console.WriteLine(ex.Message);
    } catch (System.Runtime.InteropServices.ExternalException ex) {
      Console.WriteLine(ex.Message);
    }

  }
}