我需要一种方法来检查在将文件复制到该服务器之前,在远程 Windows服务器上检查可用磁盘空间。使用这种方法,我可以检查主服务器是否已满,如果是,那么我会将这些文件复制到辅助服务器。如何检查可用磁盘空间?
如何使用C#/ ASP.net 2.0检查可用磁盘空间?
我需要一种方法来检查在将文件复制到该服务器之前,在远程 Windows服务器上检查可用磁盘空间。使用这种方法,我可以检查主服务器是否已满,如果是,那么我会将这些文件复制到辅助服务器。如何检查可用磁盘空间?
如何使用C#/ ASP.net 2.0检查可用磁盘空间?
您可以使用WMI,请参阅此相关的问题:
您可以通过执行以下检查:
添加System.Management.dll
为你的项目的引用。
使用下面的代码来获取磁盘空间:
using System;
using System.Management;
public string GetFreeSpace();
{
ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");
disk.Get();
string freespace = disk["FreeSpace"];
return freespace;
}
有方法可以做到这万千,我会检查System.Management命名空间更多的途径。
下面是该页面一个这样的方式:
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();
}
这适用于执行代码的机器,但对于远程服务器呢? – 2009-09-11 18:17:30
我寄给你的链接可以告诉你如何;我没有做到;但我可以发布你用来查询服务器的代码。 – 2009-09-11 18:28:40
啊好吧,我错过了ManagementScope,这应该适合我。我会试一试 – 2009-09-11 18:33:45
可以使用DriveInfo类
DriveInfo[] oDrvs = DriveInfo.GetDrives();
foreach (var Drv in oDrvs) {
if (Drv.IsReady) {
Console.WriteLine(Drv.Name + " " + Drv.AvailableFreeSpace.ToString);
}
}
这适用于执行代码的机器,但对于远程服务器呢? – 2009-09-11 18:16:57
您可以映射网络驱动器,但编程方式可能会有点复杂 – 2009-09-11 20:16:21
这似乎是从System.IO一个选项:
DriveInfo c = new DriveInfo("C");
long cAvailableSpace = c.AvailableFreeSpace;
使用此代码
static void Main()
{
try
{
DriveInfo driveInfo = new DriveInfo(@"C:");
long FreeSpace = driveInfo.AvailableFreeSpace;
}
catch (System.IO.IOException errorMesage)
{
Console.WriteLine(errorMesage);
}
}
如果您收到错误'设备未准备好'.i.e您的设备尚未准备好。 如果您尝试此代码为没有CD的CD驱动器,您将得到相同的错误:)
或者您可以使用driveInfo.IsReady检查驱动器是否准备就绪。 – 2014-05-21 06:10:41
Duplicate:http://stackoverflow.com/questions/56715/best-way-to-query-disk-space- on-remote-server – 2009-09-11 18:25:40