ELSheepO
ELSheepO

Reputation: 305

File Copy in C#.Net

I'm trying to build a copier so that you use the openFileDialog to chose a file and then the folderBrowserDialog to choose the location to copy it to.

The problem I'm having is that when I use File.Copy(copyFrom,copyTo) it gives me an exception that I can't copy to a directory.

Is there anyway around this, or am I just missing something stupid and noobish. I've tryed useing openFD for choosing both locations and have just tried using the folderBD to see if it made a difference.

I know there should be if statements there to catch the exceptions but this is a rough draft of the code to get working 1st.

Thanks in advance for the help, code attached.

        // Declare for use in all methods
    public string copyFrom;
    public string copyTo;
    public string rootFolder = @"C:\Documents and Settings\cmolloy\My Documents";

    private void btnCopyFrom_Click(object sender, EventArgs e)
    {
        // uses a openFileDialog, openFD, to chose the file to copy
        copyFrom = "";

        openFD.InitialDirectory = rootFolder;
        openFD.FileName = "";

        openFD.ShowDialog();

        // sets copyFrom = to the file chosen from the openFD
        copyFrom = openFD.FileName;

        // shows it in a textbox
        txtCopyFrom.Text = copyFrom;
    }

    private void btnCopyTo_Click(object sender, EventArgs e)
    {
        //uses folderBrowserDialog, folderBD, to chose the folder to copy to
        copyTo = "";

        this.folderBD.RootFolder = System.Environment.SpecialFolder.MyDocuments;
        this.folderBD.ShowNewFolderButton = false;
        folderBD.ShowDialog();
        DialogResult result = this.folderBD.ShowDialog();

        // sets copyTo = to the folder chosen from folderBD
        copyTo = this.folderBD.SelectedPath;

        //shows it in a textbox.
        txtCopyTo.Text = copyTo;
    }

    private void btnCopy_Click(object sender, EventArgs e)
    {
        // copys file
        File.Copy(copyFrom, copyTo);
        MessageBox.Show("File Copied");

Upvotes: 2

Views: 2096

Answers (3)

nawfal
nawfal

Reputation: 73163

Do this:

File.Copy(copyFrom, Path.Combine(copyTo, Path.GetFileName(copyFrom)));

Upvotes: 1

File.Copy needs to know the full path of the new file you want, including the file name. If you just want to use the same file name, you can use this to append the file name to the path:

copyTo = Path.Combine(copyTo, Path.GetFileName(copyFrom));

Upvotes: 0

Adriano Repetti
Adriano Repetti

Reputation: 67080

You have to append the file name to the directory path. Do this:

string destinationPath = Path.Combine(copyTo, Path.GetFileName(copyFrom));
File.Copy(copyFrom, destinationPath);

(with this you'll copy selected file to another directory with the same name of the original one and it'll throw an exception if the same file already exist in that directory)

Edit
Side note: do not hard code the path in your source code, use this:

rootFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

to get the path of current user's documents folder.

Upvotes: 3

Related Questions