通过 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
我知道,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