2008-12-16 3 views
14

Cela peut sembler une question stupide, donc voilà:Obtenir la lettre de lecteur à partir d'une chaîne de chemin ou FileInfo

Autre que l'analyse de la chaîne de FileInfo.FullPath pour la lettre de lecteur à utiliser puis DriveInfo (« c ») etc pour voir s'il y a assez d'espace pour écrire ce fichier. Est-il possible d'obtenir la lettre de lecteur à partir de FileInfo?

+0

Attention: Cela ne fonctionnera pas dans tous les cas! Ce n'est pas parce qu'il y a assez d'espace sur la racine d'un lecteur qu'il y a suffisamment d'espace dans le répertoire courant. De même, il se peut qu'il n'y ait pas d'espace à la racine mais qu'il y ait de l'espace dans le répertoire courant. Windows au moins est capable de déterminer l'espace dans le répertoire courant, comme en témoignent les programmes multiples indiquant correctement l'espace libre dans le répertoire courant, même s'il ne correspond pas à l'espace à la racine. Je n'ai pas étudié comment accomplir cela. (La situation à laquelle je pense est celle des volumes mappés dans des sous-répertoires.) –

Répondre

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

Ceci renvoie "C: \". C'est vraiment le seul autre moyen.

1

Rien de mal avec un peu de chaîne :-) analyse syntaxique

FullPath.SubString(0,1); 
+8

Cela crée des hypothèses dangereuses sur le chemin. Considérons le cas où il s'agit en fait d'un chemin d'accès UNC de la forme \\ nom_ordinateur \ partage \ chemin \ nom_fichier.txt. –

21

Eh bien, il y a aussi ceci:

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

Et hey, pourquoi pas une méthode d'extension?

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

alors vous pouvez faire:

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

Vous pouvez obtenir tout lecteur dans le système en utilisant ce code:

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

Il n'était pas approprié de renvoyer cette réponse pour inclure le lien de spam qu'un modérateur a supprimé de votre message. –

Questions connexes