2016-06-03 2 views
0

Я работаю над системой распознавания лиц. процессора изображения, используя следующий код:System.IO.IOException: файл, используемый другим процессом - попробуйте использовать Dispose

Bitmap bit = (Bitmap) System.Drawing.Image.FromFile (files [j].FullName, true); 
Image <Bgr, Byte> img1 = new Image <Bgr, Byte>(bit); // path can be absolute or relative. 
Image <Gray, Byte> grayFrem = img1.Convert <Gray, byte>(); 

оказывает и получить увеличение данных и помещает данные в словарь.

После дохода я хочу на самом деле:

Img1.Dispose(); 

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

File.Copy (Path.Combine (path, pic), Path.Combine (backupDir, pic), true); 

я все еще получаю эту ошибку:

Необработанное исключение: System.IO.IOException: Процесс не может доступ к файлу «C: \ хххххх \ хххх \ ххх \ 95177. jpg ', потому что это используется другим процессом.

Можно ли использовать другой способ для разблокировки изображения или процесса?

С наилучшими пожеланиями

+0

Необходимо удалить растровое изображение до File.Copy. Дублирование? См. Http://stackoverflow.com/questions/18250848/how-to-prevent-the-image-fromfile-method-to-lock-the-file – RamblinRose

+0

Это бит-объект, который хранит блокировку файла, вы забыли bit.Dispose(). –

+0

Что такое 'Img1'? Это связано с 'img1'? –

ответ

0

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

+0

Я попытался выполнить бит. Задайте и продолжайте: процесс не может получить доступ к файлу «C: \ RollcallPIc \ LocalCamera \ camera \ 95177.jpg», потому что он используется другим процессом. –

+0

затем попробуйте system.drawing.image.fromstream и file.open, заключенные в использование – doker

1

Здесь вы должны удалить объект MailMessage.

Для примера.

// Sends email using SMTP, Uses default network credentials 
public static void SendEmail(string To, string From, string BCC, string Subject, string Body, bool IsBodyHtml, string attachedPath = "") { 
    char[] validSeperators = new char[] { ',', ':', ';' }; 
    string fromEmail = string.Empty; 
    foreach (char seperator in validSeperators) { 
     if (!string.IsNullOrEmpty(From) && From.Contains(seperator.ToString())) { 
      fromEmail = From.Split(seperator)[0]; 
      break; 
     } 
    } 

    //create mail message 
    MailMessage message = !string.IsNullOrEmpty(fromEmail) ? new MailMessage(fromEmail, To) : new MailMessage(From, To); 
    if (BCC.Length > 0) { 
     message.Bcc.Add(BCC); 
    } 

    message.IsBodyHtml = IsBodyHtml; 
    message.Subject = Subject; 
    message.Body = Body; 

    // Email Attachment 
    if (!string.IsNullOrEmpty(attachedPath)) { 
     Attachment attach = new Attachment(attachedPath); 

     // Attach the created email attachment 
     message.Attachments.Add(attach); 
    } 

    //create mail client and send email 
    SmtpClient emailClient = new SmtpClient(); 

    emailClient.Host = SMTPServer; 
    emailClient.Port = SMTPPort; 
    emailClient.Credentials = new NetworkCredential(SMTPUserName, SMTPPassword); 
    emailClient.EnableSsl = EnableSSLForSMTP; 
    emailClient.Send(message); 
    //Here you can dispose it after sending the mail. 
    message.Dispose(); 

    //Remove specific file after sending mail to customer 
    if (!string.IsNullOrEmpty(attachedPath)) 
     DeleteAttachedFile(attachedPath); 
} 

//Method to remove attached file from specific path. 
private static void DeleteAttachedFile(string attachedPath) { 
    File.SetAttributes(attachedPath, FileAttributes.Normal); 
    File.Delete(attachedPath); 
} 
Смежные вопросы