Второй фрагмент пути не должен быть именем диска или UNC - ошибка создания подкаталога

У меня есть исключение в третьей строке этого кода "Второй фрагмент пути не должен быть именем диска или UNC"

DirectoryInfo labdi = new DirectoryInfo(Back.mainfolderpath + @"\news\l");
DirectoryInfo tld = new DirectoryInfo(labdi.FullName + @"\" + NorA.sn.labl[i]);
tld = labdi.CreateSubdirectory(labdi.FullName + @"\" + NorA.sn.labl[i] + @"\");

Там нет полезного способа в Интернете. Благодарю вас.:!

3 ответа

Я столкнулся с этим сегодня и наконец разыскал это.

Исключение пытается сообщить вам, что когда DirectoryInfo принимает путь в качестве аргумента (например, CreateSubdirectory или GetFiles), он будет возражать, если аргумент пути содержит Root, и выбрасывает это неуловимое исключение.

Таким образом, аргументы пути, содержащие "C:\" или "D:\" и т. Д., Не работают. Вооруженный этим контекстом, сообщение об исключении на самом деле имеет немного смысла.

В вашем коде вы использовали свойство FullName, и эта строка содержит "C:\" или любой другой корень.

Учитывая возраст вопроса, я должен добавить C#, .NET 4.5, VS2013.

Самым простым решением этой проблемы является использование статической версии методов Directory и File. Вам не нужно удалять рут, делая это таким образом. Вам также не нужны объекты DirectoryInfo или FileInfo, они вызывают головную боль

string someFile = @"C:\somefolder\somefile.txt";
string directory = Path.GetDirectoryName(someFile);

foreach(var file in Directory.GetFiles(directory))
{
   File.Delete(file);
}

Решение состоит в том, чтобы не указывать полный путь к файлу в аргументе.

У вас уже есть путь к родительскому каталогу в качестве объекта, поэтому вам нужно только указать имя нового каталога в качестве аргумента.

      tld = labdi.CreateSubdirectory(NorA.sn.labl[i]);
Другие вопросы по тегам