Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

File locked after sending it as attachment

I am sending a file as an attachment:

            // Create  the file attachment for this e-mail message.
            Attachment data = new Attachment(filePath, MediaTypeNames.Application.Octet);
            // Add time stamp information for the file.
            ContentDisposition disposition = data.ContentDisposition;
            disposition.CreationDate = System.IO.File.GetCreationTime(filePath);
            disposition.ModificationDate = System.IO.File.GetLastWriteTime(filePath);
            disposition.ReadDate = System.IO.File.GetLastAccessTime(filePath);
            // Add the file attachment to this e-mail message.
            message.Attachments.Add(data);

And then I want to move the file to another folder, however when I try to do this

                    try
                    {
                        //File.Open(oldFullPath, FileMode.Open, FileAccess.ReadWrite,FileShare.ReadWrite);
                        File.Move(oldFullPath, newFullPath);

                    }
                    catch (Exception ex)
                    {
                    }

Its throwing an exception that the file is already being used in another process. How I can unlock this file so that it can be moved to this location?

like image 413
JMon Avatar asked Mar 04 '11 08:03

JMon


3 Answers

Disposing your message will fix this for you. Try calling Dispose on your message before moving the file, like so:

message.Dispose();
File.Move(...)

When disposing MailMessage, all locks and resources are released.

like image 183
alexn Avatar answered Nov 04 '22 19:11

alexn


You need to take advantage of "using" keyword:

using(Attachment att = new Attachment(...))
{
   ...
}

That's because "using" ensures IDisposable.Dispose method is called at the end of code block execution.

Whenever you use some class that's managing some resource, check if it's IDisposable and then use "using" block and you won't need to care about manually disposing calling IDisposable.Dispose.

like image 28
Matías Fidemraizer Avatar answered Nov 04 '22 20:11

Matías Fidemraizer


Attachments are IDisposable and should be disposed of correctly after they have been sent to release the lock on the file

like image 6
Greg B Avatar answered Nov 04 '22 20:11

Greg B