Hanny Hanny - 3 months ago 17
C# Question

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

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.

Answer

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);
}
Comments