Сообщение об ошибке "Не удалось найти часть пути"
Я программирую в С# и хочу скопировать папку с подпапками с флеш-диска для запуска.
Вот мой код:
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 должен создать любой путь, если только сам путь недействителен, читать недопустимые символы
- Учетная запись, на которой выполняется ваше приложение, не имеет прав на создание каталога в пути, например, если вы пытаетесь создать каталог на общем диске с недостаточными привилегиями и т.д.