通过 IP 地址查看驱动器的可用空间

See the AvailableFreeSpace of drives via IP-Address

我知道,AvailableFreeSpace 可用于 "C:/"、"D:/" 等本地驱动器。 它也适用于网络驱动器。

但现在我的问题是:

是否可以在另一个 IP 上查看 "Folder" 的 AvailableFreeSpace? 我使用以下代码连接到本地驱动器:

System.IO.DriveInfo _DriveInfo = new DriveInfo(SaveLocation);

当 "SaveLocation" 是像 "C:\Temp\Folder" 这样的本地驱动器时,它工作正常。

但是当"SaveLocation"里面有IP的时候就不行了。在这种情况下,SaveLocation 看起来像这样:“192.168.200.10\c\Data”

这不起作用,这就是我提出问题的原因。异常消息是:{"Object must be a root directory (\"C:\\") 或驱动器号 (\"C\")。"}

希望你能帮帮我。

Get available disk free space for a given path on Windows 所示:

使用 winapi 函数 GetDiskFreeSpaceEx 确定 UNC(网络)路径上的空闲 space。例如,创建一个名为 FreeSpace 的新 VS 项目并将其粘贴为 Program.cs:

    using System;
    using System.Runtime.InteropServices;

    namespace FreeSpace
    {
        class Program
        {
            [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
            [return: MarshalAs(UnmanagedType.Bool)]
            static extern bool GetDiskFreeSpaceEx(string lpDirectoryName,
                                        out ulong lpFreeBytesAvailable,
                                        out ulong lpTotalNumberOfBytes,
                                        out ulong lpTotalNumberOfFreeBytes);

            static void Main(string[] args)
            {
                ulong FreeBytesAvailable;
                ulong TotalNumberOfBytes;
                ulong TotalNumberOfFreeBytes;

                bool success = GetDiskFreeSpaceEx(@"\NETSHARE\folder",
                                              out FreeBytesAvailable,
                                              out TotalNumberOfBytes,
                                              out TotalNumberOfFreeBytes);
                if (!success)
                    throw new System.ComponentModel.Win32Exception();

                Console.WriteLine("Free Bytes Available:      {0,15:D}", FreeBytesAvailable);
                Console.WriteLine("Total Number Of Bytes:     {0,15:D}", TotalNumberOfBytes);
                Console.WriteLine("Total Number Of FreeBytes: {0,15:D}", TotalNumberOfFreeBytes);
                Console.ReadKey();
            }
        }
    }

如您所见,这与上面链接的问题中的代码完全相同,只是分解为 class 加上正确的 using 指令以进行无错编译。所有学分归于 https://whosebug.com/users/995926/rekire

WMI 似乎无法处理网络共享上的免费 space。 但是对于本地磁盘,Windows 管理界面是可行的方法: https://msdn.microsoft.com/en-us/library/aa394592(v=vs.85).aspx