Невозможно переместить файлы из списка в только что созданную папку - PullRequest
0 голосов
/ 07 декабря 2018

У меня проблемы с перемещением файлов из списка в недавно созданную папку.Я получаю: не могу создать файл, когда этот файл уже существует.

public void CreateFolders()
    {            
        //create folders
        string folder1 = pattern.Substring(0, 2);
        string folder2 = pattern.Substring(3, 2);
        string folder3 = pattern.Substring(6, 2);
        Directory.CreateDirectory("c:\\destinationfolder" + "\\" + folder1);
        Directory.CreateDirectory("c:\\destinationfolder" + "\\" + folder1 + "\\" + folder2);
        Directory.CreateDirectory("c:\\destinationfolder" + "\\" + folder1 + "\\" + folder2 + "\\" + folder3);
        var destinationDirectoryFinal = Directory.CreateDirectory("c:\\destinationfolder" + "\\" + folder1 + "\\" + folder2 + "\\" + folder3);
        destinationDirectory = destinationDirectoryFinal.FullName.ToString();
    }

    public void MoveFiles()
    {
        try
        {
            //Move files from listbox to newly created folders
            foreach (string files in listBox1.Items)
            {
                File.Move(files, destinationDirectory);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: " + ex);
        }

    }

1 Ответ

0 голосов
/ 07 декабря 2018

Проблема, с которой вы здесь сталкиваетесь, заключается в том, что вы пытаетесь переместить файл в каталог, который уже содержит файл с таким именем.

Существует несколько вариантов, которые вы можете выбрать:

Вариант один

Проверьте, существует ли файл, прежде чем пытаться Move

foreach (var file in listBox1.Items)
{
    // Only move the file if it doesn't already exist
    if (!File.Exists(Path.Combine(destinationDirectory, Path.GetFileName(file))))
    {
        File.Move(file, destinationDirectory);
    }
}

Вариант два

Всегда перезаписывать файл, еслиэто существует.Мы можем сделать это в два этапа: сначала вызвав File.Copy с параметром "overwrite", установленным в true, а затем вызвав File.Delete, чтобы удалить файл в исходном местоположении:

foreach (var file in listBox1.Items)
{
    // If the destination file already exists, overwrite it. Then delete the original
    File.Copy(file, Path.Combine(destinationDirectory, Path.GetFileName(file)), true);
    File.Delete(file);
}


Примечание: Еще одна вещь, которую вы можете сделать для предотвращения ошибок (в любом случае), это убедиться, что исходный файл существует, и что исходный каталог не совпадает скаталог назначения, прежде чем пытаться что-либо:

foreach (var file in listBox1.Items)
{
    // Ensure that the file exists and that the source 
    // and destination directories are not the same
    if (!(File.Exists(file)) ||
        Path.GetDirectoryName(file).Equals(
            destinationDirectory, StringComparison.OrdinalIgnoreCase))
    {
        continue; // Continue to the next loop iteration without doing anything
    }

    // Rest of loop code here...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...