Сообщение об ошибке "Не удалось найти часть пути"

Я программирую в С# и хочу скопировать папку с подпапками с флеш-диска для запуска.

Вот мой код:

private void copyBat()
    {
        try
        {
            string source_dir = "E:\\Debug\\VipBat";
            string destination_dir = "C:\\Users\\pc\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup";

            if (!System.IO.Directory.Exists(destination_dir))
            {
                System.IO.Directory.CreateDirectory(destination_dir);
            }



            // Create subdirectory structure in destination    
            foreach (string dir in Directory.GetDirectories(source_dir, "*", System.IO.SearchOption.AllDirectories))
            {
                Directory.CreateDirectory(destination_dir + dir.Substring(source_dir.Length));

            }

            foreach (string file_name in Directory.GetFiles(source_dir, "*.*", System.IO.SearchOption.AllDirectories))
            {
                File.Copy(file_name, destination_dir + file_name.Substring(source_dir.Length), true);
            }
        }

        catch (Exception e)
        {
            MessageBox.Show(e.Message, "HATA", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

    }           

Появилась ошибка:

Не удалось найти часть пути E:\Debug\VipBat

Спасибо за вашу помощь....

Ответ 1

Ошибка сама по себе. Путь, к которому вы пытаетесь получить доступ, отсутствует.

string source_dir = "E:\\Debug\\VipBat\\{0}";

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

Второе; что есть {0} в вашей строке. Я уверен, что это заполнитель аргументов, потому что имя папки не может содержать {0} такое имя. Поэтому вам нужно использовать String.Format() для замены фактического значения.

string source_dir = String.Format("E:\\Debug\\VipBat\\{0}",variableName);

Но сначала проверьте существование пути, к которому вы пытаетесь получить доступ.

Ответ 2

Там что-то не так. Вы написали:

string source_dir = @"E:\\Debug\\VipBat\\{0}";

и ошибка была

Не удалось найти часть пути E\Debug\VCCSBat

Это не тот же каталог.

В вашем коде есть проблема, вы должны использовать:

string source_dir = @"E:\Debug\VipBat"; // remove {0} and the \\ if using @

или

string source_dir = "E:\\Debug\\VipBat"; // remove {0} and the @ if using \\

Ответ 3

Является ли диск E сопоставленным диском? Затем он может быть создан другой учетной записью, отличной от учетной записи пользователя. Это может быть причиной ошибки.

Ответ 4

File.Copy(имя_файла, destination_dir + имя_файла .Substring(source_dir.Length), true);

В этой строке есть ошибка, потому что ожидаемый код - это имя каталога + имя файла, а не имя файла.

Это правильный вариант

File.Copy(source_dir + имя_файла, destination_dir + имя_файла .Substring(source_dir.Length), true);

Ответ 5

Возможно, он не связан, но используйте Path.Combine вместо destination_dir + dir.Substring(...). По внешнему виду ваш .Substring() оставит зазор в начале, но вспомогательные классы, такие как Path, существуют по какой-то причине.

Ответ 6

У меня была такая же ошибка, хотя в моем случае проблема заключалась в форматировании пути DESTINATION. Вышеприведенные комментарии верны в отношении отладки форматирования строки пути, но, как представляется, ошибка в отчете об исключении File.Copy, где она по-прежнему возвращает путь SOURCE вместо пути DESTINATION. Поэтому не забудьте также посмотреть здесь.

-TC

Ответ 7

Я разрешил подобную проблему, просто перезапустив Visual Studio с правами администратора.

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

Ответ 8

Для этой ошибки может быть одна из двух причин:

  • Неправильный путь - но это менее вероятно, поскольку CreateDirectory должен создать любой путь, если только сам путь недействителен, читать недопустимые символы
  • Учетная запись, на которой выполняется ваше приложение, не имеет прав на создание каталога в пути, например, если вы пытаетесь создать каталог на общем диске с недостаточными привилегиями и т.д.