2008-12-16 12 views
14

może to wydawać się głupie pytanie, więc tu idzie:Pobierz literę dysku z ciąg ścieżki lub FileInfo

Inne niż parsowania ciąg FileInfo.FullPath na literę napędu, aby następnie wykorzystać DriveInfo („C”) itp., aby sprawdzić, czy jest wystarczająco dużo miejsca na zapisanie tego pliku. Czy istnieje sposób na uzyskanie litery dysku z FileInfo?

+0

Ostrzeżenie: To nie będzie działać we wszystkich przypadkach! To, że jest wystarczająca ilość miejsca na dysku głównym, nie oznacza, że ​​w bieżącym katalogu jest wystarczająco dużo miejsca. Podobnie może nie być miejsca w katalogu głównym, ale w bieżącym katalogu jest miejsce. Windows przynajmniej jest w stanie odgadnąć przestrzeń w bieżącym katalogu, o czym świadczy wiele programów poprawnie raportujących wolne miejsce w bieżącym katalogu, nawet jeśli nie pasuje do miejsca w katalogu głównym. Nie zbadałem, jak to osiągnąć. (Sytuacja, o której myślę, to woluminy zmapowane na podkatalogi.) –

Odpowiedz

31
FileInfo f = new FileInfo(path);  
string drive = Path.GetPathRoot(f.FullName); 

To wróci "C: \". To naprawdę jedyna inna droga.

1

Nic złego w odrobinie ciąg parsowania :-)

FullPath.SubString(0,1); 
+8

To tworzy niebezpieczne założenia dotyczące ścieżki. Rozważmy przypadek, w którym faktycznie jest to ścieżka UNC o postaci \\ nazwa_komputera \ nazwa_udziału \ ścieżka \ nazwa_pliku.txt. –

21

Cóż, jest to również:

FileInfo file = new FileInfo(path); 
DriveInfo drive = new DriveInfo(file.Directory.Root.FullName); 

i hej, czemu nie metodę rozszerzenia?

public static DriveInfo GetDriveInfo(this FileInfo file) 
{ 
    return new DriveInfo(file.Directory.Root.FullName); 
} 

Następnie można po prostu zrobić:

DriveInfo drive = new FileInfo(path).GetDriveInfo(); 
-1

można uzyskać wszystkie napędu w systemie przy użyciu tego kodu:

foreach (DriveInfo objDrive in DriveInfo.GetDrives()) 
    { 
     Response.Write("</br>Drive Type : " + objDrive.Name); 
     Response.Write("</br>Drive Type : " + objDrive.DriveType.ToString()); 
     Response.Write("</br>Available Free Space : " + objDrive.AvailableFreeSpace.ToString() + "(bytes)"); 
     Response.Write("</br>Drive Format : " + objDrive.DriveFormat); 
     Response.Write("</br>Total Free Space : " + objDrive.TotalFreeSpace.ToString() + "(bytes)"); 
     Response.Write("</br>Total Size : " + objDrive.TotalSize.ToString() + "(bytes)"); 
     Response.Write("</br>Volume Label : " + objDrive.VolumeLabel); 
     Response.Write("</br></br>"); 

    } 
+1

Nie należy wstawiać tej odpowiedzi, aby uwzględnić link do spamu usunięty przez Moderatora ze swojego wpisu. –

Powiązane problemy