c# - ¿Cómo puedo verificar el espacio disponible en el disco?
asp.net diskspace (5)
Necesito una forma de verificar el espacio en disco disponible en un servidor remoto de Windows antes de copiar archivos en ese servidor. Usando este método, puedo verificar si el servidor primario está lleno y si lo está, luego copiaré los archivos a un servidor secundario.
¿Cómo puedo verificar el espacio disponible en el disco usando C # / ASP.net 2.0?
Esto parece ser una opción del System.IO:
DriveInfo c = new DriveInfo("C");
long cAvailableSpace = c.AvailableFreeSpace;
Puede usar WMI, vea esta pregunta relacionada:
La mejor manera de consultar el espacio en disco en el servidor remoto
Puedes comprobarlo haciendo lo siguiente:
Agregue System.Management.dll
como referencia a su proyecto.
Usa el siguiente código para obtener el espacio en disco:
using System;
using System.Management;
public string GetFreeSpace();
{
ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=/"c:/"");
disk.Get();
string freespace = disk["FreeSpace"];
return freespace;
}
Hay un sinnúmero de maneras de hacerlo, System.Management espacio de nombres de System.Management para más formas.
Aquí hay una forma de esa página:
public void GetDiskspace()
{
ConnectionOptions options = new ConnectionOptions();
ManagementScope scope = new ManagementScope("////localhost//root//cimv2",
options);
scope.Connect();
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");
SelectQuery query1 = new SelectQuery("Select * from Win32_LogicalDisk");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection queryCollection = searcher.Get();
ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(scope, query1);
ManagementObjectCollection queryCollection1 = searcher1.Get();
foreach (ManagementObject m in queryCollection)
{
// Display the remote computer information
Console.WriteLine("Computer Name : {0}", m["csname"]);
Console.WriteLine("Windows Directory : {0}", m["WindowsDirectory"]);
Console.WriteLine("Operating System: {0}", m["Caption"]);
Console.WriteLine("Version: {0}", m["Version"]);
Console.WriteLine("Manufacturer : {0}", m["Manufacturer"]);
Console.WriteLine();
}
foreach (ManagementObject mo in queryCollection1)
{
// Display Logical Disks information
Console.WriteLine(" Disk Name : {0}", mo["Name"]);
Console.WriteLine(" Disk Size : {0}", mo["Size"]);
Console.WriteLine(" FreeSpace : {0}", mo["FreeSpace"]);
Console.WriteLine(" Disk DeviceID : {0}", mo["DeviceID"]);
Console.WriteLine(" Disk VolumeName : {0}", mo["VolumeName"]);
Console.WriteLine(" Disk SystemName : {0}", mo["SystemName"]);
Console.WriteLine("Disk VolumeSerialNumber : {0}", mo["VolumeSerialNumber"]);
Console.WriteLine();
}
string line;
line = Console.ReadLine();
}
Puedes usar la clase DriveInfo
DriveInfo[] oDrvs = DriveInfo.GetDrives();
foreach (var Drv in oDrvs) {
if (Drv.IsReady) {
Console.WriteLine(Drv.Name + " " + Drv.AvailableFreeSpace.ToString);
}
}
usando este código
static void Main()
{
try
{
DriveInfo driveInfo = new DriveInfo(@"C:");
long FreeSpace = driveInfo.AvailableFreeSpace;
}
catch (System.IO.IOException errorMesage)
{
Console.WriteLine(errorMesage);
}
}
SI está recibiendo el error " El dispositivo no está listo ". Es decir, su dispositivo no está listo. Si está intentando este código para una unidad de CD sin CD, obtendrá el mismo error:)