2008-12-16 9 views
14

dies wie eine dumme Frage zu sein scheint, so hier geht:Holen Sie den Laufwerksbuchstaben von einem Pfad String oder Fileinfo

Anders als für den Laufwerksbuchstaben die Zeichenfolge von FileInfo.FullPath Parsen dann Driveinfo („c“ zu verwenden) usw., um zu sehen, ob genug Platz ist, um diese Datei zu schreiben. Gibt es eine Möglichkeit, den Laufwerksbuchstaben von FileInfo zu erhalten?

+0

Warnung: Dies wird in allen Fällen nicht funktionieren! Nur weil auf dem Stamm eines Laufwerks genügend Speicherplatz vorhanden ist, bedeutet dies nicht, dass im aktuellen Verzeichnis genügend Speicherplatz vorhanden ist. Ebenso ist möglicherweise nicht der Speicherplatz im Stammverzeichnis vorhanden, aber im aktuellen Verzeichnis ist Platz. Windows ist zumindest in der Lage, den Speicherplatz im aktuellen Verzeichnis zu ermitteln, wie von mehreren Programmen gezeigt wird, die den freien Speicherplatz im aktuellen Verzeichnis korrekt angeben, auch wenn der Speicherplatz im Stammverzeichnis nicht übereinstimmt. Ich habe nicht untersucht, wie dies zu erreichen ist. (Die Situation, die ich denke, ist Volumes in Unterverzeichnissen zugeordnet.) –

Antwort

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

Dies wird zurückkehren "C: \". Das ist wirklich der einzige andere Weg.

1

Nichts falsch mit einem kleinen String Parsen :-)

FullPath.SubString(0,1); 
+8

Dies macht unsichere Annahmen über den Pfad. Betrachten Sie den Fall, in dem es sich tatsächlich um einen UNC-Pfadnamen der Form \\ Computername \ Freigabe \ Pfad \ Dateiname.txt handelt. –

21

Nun, es gibt auch dies:

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

Und hey, warum nicht eine Erweiterungsmethode?

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

Sie könnten dann nur tun:

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

Sie können alle Antriebssystem erhalten Sie diesen Code verwenden:

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

Es war nicht angebracht, diese Antwort zurückzusenden, um den Spam-Link zu enthalten, den ein Moderator aus Ihrem Post entfernt hat. –

Verwandte Themen