File.Copy error - C# - IOException The filename, directory name, or volume label

时间:2016-08-31 17:44:47

标签: c#

Trying to copy all files/directories inside a directory to a new location that I create. Users select the 'backup drive' to work with to in a combobox, then when they click the backup desktop button it simply creates a backup directory on that drive and copies all the files into that directory.

The backup directory gets created on the drive appropriately - but the first file it hits it kicks off an error.

private void backupDesktopButton_Click(object sender, EventArgs e)
{
     //set the destionationLocation to the selectedDrive
     string selectedDrive = backupDriveCombo.SelectedItem.ToString();
     string destinationLocation = selectedDrive+"Backups-" + DateTime.Now.Month.ToString()+"-"+DateTime.Now.Year.ToString()+"\\Desktop\\";
     if (!Directory.Exists(destinationLocation))
     {
         Directory.CreateDirectory(destinationLocation);
     }

     string desktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);

     string[] fileList = Directory.GetFiles(desktopFolder);
     foreach (string file in fileList)
     {
         //move the file
         File.Copy(file, destinationLocation);
     }
}

I get the error:

IOException was unhandled.

The filename, directory name, or volume label syntax is incorrect.

In the 'Autos' window (VS2010) I see the locations are set correctly:

destinationLocation = the appropriate directory (C:\Backups-8-2016\Desktop\)

file = the appropriate first file (C:\Users\myusername\Desktop\myshortcut.url)

What am I missing? I have all rights to be able to copy/paste/create things and the directory to store it gets created - just a problem moving the file.

2 个答案:

答案 0 :(得分:3)

From the documentation https://msdn.microsoft.com/en-us/library/c6cfw35a(v=vs.110).aspx

the second parameter: The name of the destination file. This cannot be a directory or an existing file.

you need to concat the filename to the folder.

答案 1 :(得分:2)

Try something like this

string[] fileList = Directory.GetFiles(desktopFolder);
foreach (string file in fileList)
{
    string targetFile = Path.Combine(destinationLocation, Path.GetFileName(file));
    if (File.Exists(targetFile)) File.Delete(targetFile);
    File.Copy(file, targetFile);
}