2008-12-16 12 views
14

Esto puede parecer una pregunta estúpida, así que aquí va:Obtener la letra de unidad de una cadena de ruta o FileInfo

Aparte de analizar la cadena de FileInfo.FullPath para la letra de unidad a continuación, utilizar DriveInfo ("c") etc. para ver si hay espacio suficiente para escribir este archivo. ¿Hay alguna forma de obtener la letra de la unidad desde FileInfo?

+0

Advertencia: Esto no funcionará en todos los casos! El hecho de que haya suficiente espacio en la raíz de una unidad no significa que haya suficiente espacio en el directorio actual. Del mismo modo, puede que no haya espacio en la raíz, pero hay espacio en el directorio actual. Windows al menos es capaz de determinar el espacio en el directorio actual, como lo demuestran varios programas que informan correctamente el espacio libre en el directorio actual, incluso cuando no coincide con el espacio en la raíz. No he investigado cómo lograr esto. (La situación en la que estoy pensando son volúmenes mapeados en subdirectorios). –

Respuesta

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

Esto devolverá "C: \". Esa es realmente la única otra forma.

1

No hay nada malo con un poco de procesamiento de cadenas :-)

FullPath.SubString(0,1); 
+8

Esto está haciendo suposiciones inseguras sobre el camino. Considere el caso en el que en realidad es una ruta de acceso UNC de la forma \\ machinename \ share \ path \ filename.txt. –

21

Bueno, también es esto:

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

Y oye, ¿por qué no un método de extensión?

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

A continuación, sólo podía hacer:

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

Usted puede obtener toda la unidad en el sistema utilizando este código:

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

No fue apropiado devolver esta respuesta para incluir el enlace fraudulento que un moderador eliminó de su publicación. –

Cuestiones relacionadas