2013-09-03 21 views
5

mam wyjątek w trzecim wierszu ofthis kodem „Drugi fragment ścieżka nie musi być twardy lub nazwa UNC”Drugi fragment ścieżka nie musi być twardy lub nazwa UNC - Tworzenie podkatalogu błąd

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] + @"\"); 

Jest nie ma użytecznego sposobu w sieci. Dziękuję.:!

+1

Co to jest „NorA.sn.labl [i]”? – doctorlove

+1

Dlaczego nie używasz Sytem.IO.Path.Combine()? – Heslacher

+0

@doctorlove: jest ciągiem znaków –

Odpowiedz

12

Wpadłem na to dzisiaj i w końcu go wyśledziłem.

Wyjątkiem jest zasygnalizowanie, że gdy DirectoryInfo przyjmuje ścieżkę jako argument (np. CreateSubdirectory lub GetFiles), będzie obiektował, jeśli argument ścieżka zawiera katalog główny i wyrzuci ten nieuchwytny wyjątek.

Tak więc argumenty ścieżki zawierające "C: \" lub "D: \" itp nie działają. Uzbrojony w ten kontekst komunikat o wyjątku ma sens.

W kodzie używałeś właściwości FullName, a ten ciąg zawiera "C: \" lub cokolwiek innego.

Biorąc pod uwagę wiek pytania, powinienem dodać C#, .NET 4.5, VS2013.

4

Najprostszym rozwiązaniem tego problemu jest użycie statycznej wersji metod Katalog i Plik. Nie musisz usuwać roota, wykonując to w ten sposób. Także nie trzeba obiekty DirectoryInfo lub FileInfo, są one co daje Ci bóle głowy

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

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