2013-04-08 4 views
2

У меня возникли проблемы с сохранением загруженного пользователем изображения в файл «logos», когда пользователь нажимает «Сохранить команду» в моей форме.C# Сохранить изображение без использования Dialog

Для того, чтобы получить информацию о том, что приложение предоставило мне, screenshot here, при нажатии команды добавления все текстовые данные записываются в текстовый файл, и я хочу, чтобы изображение автоматически сохранялось в предопределенной папке «логотипы» ", однако я получаю ошибку GDI ++ всякий раз, когда я нажимаю save.

После прочтения нескольких старых потоков в Интернете я обнаружил, что это может быть вызвано несколькими вещами, такими как разрешения на файлы, размер файла, имя файла или даже открытый поток.

Ниже приведен код, я в настоящее время использую, чтобы сохранить мой файл, который выдает ошибку:

 private void btnAddTeam_Click(object sender, EventArgs e) 
    { 
     //VALIDATION FOR TEXT FILE AND OTHER STUFF HERE... 

     //SAVE THE IMAGE FILE 
     string filePath = picTeamLogo.ImageLocation; 
     Image tempImage = Image.FromFile(filePath); 

     tempImage.Save(@"../logos/"); 
    } 

Если вы смотрите скриншот, пожалуйста, не пугайтесь «arsenal.png» Я знаю, что это не полный путь к файлу, его преобразование обрабатывается другим методом, так как требуется только имя файла для записи в текстовый файл.

Если у кого-нибудь есть идеи о том, где я ошибаюсь, пожалуйста, укажите мне в правильном направлении, такие расплывчатые ошибки, как GDI, которые я только что получил, - такая головная боль!


Alex.

+1

вы можете обеспечить исключение с StackTrace? – DarkSquirrel42

+0

Похоже, вам нужно указать имя файла, а не только каталог. @ "../ logos/test.bmp", например. – Gray

+0

Возможный дубликат [Общая ошибка, возникающая в GDI + в методе Bitmap.Save] (http://stackoverflow.com/questions/15862810/a-generic-error-occured-in-gdi-in-bitmap-save-method) –

ответ

1

это потому, что вы не указали имя файла для сохранить функцию!

посмотрите на это:

string filePath = picTeamLogo.ImageLocation; 
FileInfo fi = new FileInfo(filePath); 
Image tempImage = Image.FromFile(fi.FullName); 
tempImage.Save(@"../logo/" + fi.Name); 

теперь работает правильно

+1

, и это именно то, что я искал, спасибо Мехран. – Alex

+0

приветствуется Алекс – Mehran

1

Смотреть это ранее пост моего по аналогичному вопросу ...

A Generic error occurred in GDI+ in Bitmap.Save method

поток остается заблокированным - вы можете использовать поток памяти в качестве места темпа затем сохранить.

When either a Bitmap object or an Image object is constructed from a file, the file remains locked for the lifetime of the object. As a result, you cannot change an image and save it back to the same file where it originated. http://support.microsoft.com/?id=814675

string outputFileName = "..."; 
using (MemoryStream memory = new MemoryStream()) 
{ 
    using (FileStream fs = new FileStream(outputFileName, FileMode.Create, FileAccess.ReadWrite)) 
    { 
     tempImage.Save(memory, ImageFormat.Jpeg); 
     // memory.ToStream(fs) // I think the same 
     byte[] bytes = memory.ToArray(); 
     fs.Write(bytes, 0, bytes.Length); 
    } 
} 

Или альтернатива загружается изображение с помощью MemoryStream в изображение - поэтому поток не запертыми в первую очередь ...

2

Попробуйте этот метод

public void storeFile(FileUpload File, string dirName) 
    { 
     if (!Directory.Exists(MapPath("~/uploads/" + dirName))) 
     { 
      Directory.CreateDirectory(MapPath("~/uploads/" + dirName)); 
     } 
     string saveLocation = MapPath("~/uploads/" + dirName + "/" +  Path.GetFileName(File.FileName)); 
     File.SaveAs(saveLocation); 


    } 
Смежные вопросы