My code goes as follows:

private void btnChangeImg_Click(object sender, EventArgs e)
            using (var openFileDialogForImgUser = new OpenFileDialog())
                string location = null;
                string fileName = null;
                string sourceFile = null;
                string destFile = null;
                string targetPath = @"..\..\Images";
                openFileDialogForImgUser.Filter = "Image Files (*.jpg, *.png, *.gif, *.bmp)|*.jpg; *.png; *.gif; *.bmp|All Files (*.*)|*.*"; // filtering only picture file types
                openFileDialogForImgUser.InitialDirectory = @"D:\My Pictures";
                var openFileResult = openFileDialogForImgUser.ShowDialog(); // show the file open dialog box
                if (openFileResult == DialogResult.OK)
                    using (var formSaveImg = new FormSave())
                        var saveResult = formSaveImg.ShowDialog();
                        if (saveResult == DialogResult.Yes)
                            imgUser.Image = new Bitmap(openFileDialogForImgUser.FileName); //showing the image opened in the picturebox
                            fileName = openFileDialogForImgUser.FileName;
                            location = Path.GetDirectoryName(fileName);
                            sourceFile = System.IO.Path.Combine(location, fileName);
                            destFile = System.IO.Path.Combine(targetPath, fileName);
                            if (!System.IO.Directory.Exists(targetPath))
                            System.IO.File.Copy(sourceFile, destFile, true); //error occurs here

I can't copy the file because System.IO.IOException occurs. The message goes like: "The process cannot access the file <file> because it is being used by another process". I know I have to terminate the process using the file, but how do I know which process that is? BTW, when I say file, I am refering to the image that the user selected when the OpenFileDialog is shown.

2 Years
Discussion Span
Last Post by JOSheaIV

First of all quick tip for you

openFileDialog.ShowDialog() == DialogResults.OK you can stick that in an if statement (I love to do it that way).

Secondly, I see it's an image ... aka, "Royal pain in the butt when it comes to memory management".

I'd suggest trying ddanbe's idea first. However, if that doesn't work (which I don't see why not, but then again Images cause me nothing but headaches), you could always try doing something like

Image image = Image.FromFile("FileName")

Which will load the image in from a file, and then follow that up with an


And then just dispose of the Image (or you could use that in a 'using' statement). I should point out the Save does offer some other features like including the ImageFormat, if yo ucare to explore that

Edited by JOSheaIV

This article has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.