0

我想使用路径检查本地机器中的可用磁盘空间...这显示无效参数错误

    string pathroot = "C:\Program Files (x86)\Personal\movies "
    ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"pathroot");
    disk.Get();
    string freespace = Convert.ToString(disk["FreeSpace"]);
    return freespace;  

谁能告诉我错误是什么?还是有其他方法可以做到这一点?

4

2 回答 2

3

只需使用DriveInfo.TotalFreeSpace

using System;
using System.IO;

class Test
{
    public static void Main()
    {
        DriveInfo[] allDrives = DriveInfo.GetDrives();

        foreach (DriveInfo d in allDrives)
        {
            Console.WriteLine("Drive {0}", d.Name);
            Console.WriteLine("  File type: {0}", d.DriveType);
            if (d.IsReady == true)
            {
                Console.WriteLine("  Volume label: {0}", d.VolumeLabel);
                Console.WriteLine("  File system: {0}", d.DriveFormat);
                Console.WriteLine(
                    "  Available space to current user:{0, 15} bytes", 
                    d.AvailableFreeSpace);

                Console.WriteLine(
                    "  Total available space:          {0, 15} bytes",
                    d.TotalFreeSpace);

                Console.WriteLine(
                    "  Total size of drive:            {0, 15} bytes ",
                    d.TotalSize);
            }
        }
    }
}
于 2013-04-23T07:17:16.057 回答
0

字符串:

"win32_logicaldisk.deviceid=\"pathroot"

仅包含一个转义的双引号。我不是专家,但我希望它是:

"win32_logicaldisk.deviceid=\"pathroot\""

但是,您实际上仍然没有将 pathroot 的值包含到生成的 WMI 查询中。为此,您可以使用以下内容:

var query = string.Format("win32_logicaldisk.deviceid=\"{0}\"", pathroot);    
ManagementObject disk = new ManagementObject(query);

我还没有测试过,但我认为这不起作用,因为“deviceid”需要一个“C:”形式的字符串,而不是完整路径。从完整路径中获取驱动器号,如下所示:

var driveLetter = System.IO.Path.GetPathRoot(pathroot);
var query = string.Format("win32_logicaldisk.deviceid=\"{0}\"", pathroot);    
ManagementObject disk = new ManagementObject(query);

但是请注意,当您需要能够为 UNC(网络共享)路径查询驱动器空间时,此方法不起作用。

最后,带有路径的硬编码字符串不会被转义。例如,现在,\Program Files 中的 \P 被视为转义序列,而不是文字 \P。用 @ 标记字符串,使其变为:

string pathroot = @"C:\Program Files (x86)\Personal\movies"
于 2013-04-23T07:14:41.103 回答