Shieldsy147
Shieldsy147

Reputation: 65

Directory could not be found

I have recently started to get an error which states my directory can not be found I have tried a number of ways to solve this but have yet to find a solution.

The method should allow the user to select an image for their computer and add it to a folder called images inside the applications folder structure. The problem is that when using the File.copy(imageFilename, path); it throws the error. I have tried changing the path and you will see from the code snip it. It is even doing it when the program itself has passed the file path for the application and is still throwing me the error.

this is the method.

    private void btnImageUpload_Click(object sender, RoutedEventArgs e)
    {
        OpenFileDialog imageFile = new OpenFileDialog();
        imageFile.InitialDirectory = @"C:\";
        imageFile.Filter = "Image Files (*.jpg)|*.jpg|All Files(*.*)|*.*";
        imageFile.FilterIndex = 1;

        if (imageFile.ShowDialog() == true)
        {
            if(imageFile.CheckFileExists)
            {
                string path = AppDomain.CurrentDomain.BaseDirectory;
                System.IO.File.Copy(imageFile.FileName, path);
            }
        }
    }

I am using VS2013 and have included the using Microsoft.win32

Any further information needed please ask.

Thanks

Upvotes: 1

Views: 462

Answers (2)

Mohit S
Mohit S

Reputation: 14064

There are 2 things need to be taken into consideration

private void btnImageUpload_Click(object sender, RoutedEventArgs e)
{
    OpenFileDialog imageFile = new OpenFileDialog();
    imageFile.InitialDirectory = @"C:\";
    imageFile.Filter = "Image Files (*.jpg)|*.jpg|All Files(*.*)|*.*";
    imageFile.FilterIndex = 1;

    if (imageFile.ShowDialog() == true)
    {
        if(imageFile.CheckFileExists)
        {
            string path = AppDomain.CurrentDomain.BaseDirectory; // You wont need it 
            System.IO.File.Copy(imageFile.FileName, path); // Copy Needs Source File Name and Destination File Name
        }
    }
}

string path = AppDomain.CurrentDomain.BaseDirectory; You won need this because the default directory is your current directory where your program is running. Secondly System.IO.File.Copy(imageFile.FileName, path); Copy Needs Source File Name and Destination File Name so you just need to give the file name instead of path

so your updated code will be

private void btnImageUpload_Click(object sender, RoutedEventArgs e)
{
    OpenFileDialog imageFile = new OpenFileDialog();
    imageFile.InitialDirectory = @"C:\";
    imageFile.Filter = "Image Files (*.jpg)|*.jpg|All Files(*.*)|*.*";
    imageFile.FilterIndex = 1;

    if (imageFile.ShowDialog() == true)
    {
        if(imageFile.CheckFileExists)
        {
            System.IO.File.Copy(imageFile.FileName, SomeName + ".jpg"); // SomeName Must change everytime like ID or something 
        }
    }
}

Upvotes: 1

vesan
vesan

Reputation: 3369

I'm not sure if that's the problem, but the File.Copy method expects a source file name and a target file name, not a source file name and directory: https://msdn.microsoft.com/en-us/library/c6cfw35a(v=vs.110).aspx

So, to make this work, in your case you'd have to do something like the following (namespaces omitted):

File.Copy(imageFile.FileName, Path.Combine(path, Path.GetFileName(imageFile.FileName));

Note that this will fail if the destination file exists, to overwrite it, you need to add an extra parameter to the Copy method (true).

EDIT: Just a note, the OpenFileDialog.CheckFileExists does not return a value indicating if the selected file exists. Instead, it is a value indicating whether a file dialog displays a warning if the user specifies a file name that does not exist. So instead of checking this property after the dialog is closed, you should set it to true before you open it (https://msdn.microsoft.com/en-us/library/microsoft.win32.filedialog.checkfileexists(v=vs.110).aspx)

Upvotes: 1

Related Questions