Создание путей с переменными (переместить папку и содержимое в новую папку) - PullRequest
0 голосов
/ 13 ноября 2018

просмотрел все и нашел множество вещей, касающихся этого, но ни один из них не использует переменные для формирования путей. Что мне нужно сделать, это переместить папку, подпапки и файлы в новый путь по нажатию кнопки. Пока что ничего из того, что я нашел, не сработало. На данный момент я не получаю никаких файлов или папок, перемещенных так, как раньше. Текущее решение, которое я попробовал, взято из MSDN и пыталось адаптировать его к моему коду. Если бы вы могли исправить код и показать мне пример, это было бы здорово. Я не знаю, что я делаю здесь не так. Вот код:

private void CopyPartsToProject()
    {
        string sourcePath = (pathToQuotes + "/" + client_name.Text + "/" + quote_id.Text);
        string targetPath = (pathToClient + "/" + client_name.Text + "/" + project_number.Text);

        string sourceFile = sourcePath + "/" + "*.*";
        string destinationFile = targetPath + "/" + "*.*";

        System.IO.File.Move(sourceFile, destinationFile);

        System.IO.Directory.Move(sourcePath, targetPath);

    }

pathToQuotes и pathToClient извлекаются из базы данных MySQL (из пользовательского ввода) другим способом. Информация получена без проблем, и пути верны. Если бы вы могли дать мне руку, это было бы оценено. Спасибо.

1 Ответ

0 голосов
/ 13 ноября 2018

Вам нужен рекурсивный метод для получения движущихся каталогов, включая все файлы и подкаталоги:

private void moveDirectory(string sourcePath ,string targetPath)
{
    if (!System.IO.Directory.Exists(targetPath))
    {
        System.IO.Directory.CreateDirectory(targetPath);
    }
    String[] files = Directory.GetFiles(sourcePath);
    String[] directories = Directory.GetDirectories(sourcePath);
    foreach (string f in files)
    {
        System.IO.File.Copy(f, Path.Combine(targetPath,Path.GetFileName(f)), true);     
    }
    foreach(string d in directories)
    {
        // recursive call
        moveDirectory(Path.Combine(sourcePath, Path.GetFileName(d)), Path.Combine(targetPath, Path.GetFileName(d)));
    }
}

, тогда использование будет таким:

private void CopyPartsToProject()
{
    string sourcePath = (pathToQuotes + "/" + client_name.Text + "/" + quote_id.Text);
    string targetPath = (pathToClient + "/" + client_name.Text + "/" + project_number.Text);

    moveDirectory(sourcePath, targetPath);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...