C# 通过IP地址查看驱动器的可用可用空间
我知道,AvailableFreeSpace可以用于本地驱动器,如“C:/”和“D:/”等。 它也适用于网络驱动器 但现在我的问题是: 是否可以在另一个IP上查看“文件夹”的可用空间? 我使用以下代码连接到本地驱动器:C# 通过IP地址查看驱动器的可用可用空间,c#,driveinfo,C#,Driveinfo,我知道,AvailableFreeSpace可以用于本地驱动器,如“C:/”和“D:/”等。 它也适用于网络驱动器 但现在我的问题是: 是否可以在另一个IP上查看“文件夹”的可用空间? 我使用以下代码连接到本地驱动器: System.IO.DriveInfo _DriveInfo = new DriveInfo(SaveLocation); 当“SaveLocation”是一个像“C:\Temp\Folder”这样的本地驱动器时,它工作正常 但当“SaveLocation”中有IP时,它就不起
System.IO.DriveInfo _DriveInfo = new DriveInfo(SaveLocation);
当“SaveLocation”是一个像“C:\Temp\Folder”这样的本地驱动器时,它工作正常
但当“SaveLocation”中有IP时,它就不起作用了。SaveLocation在这种情况下如下所示:“192.168.200.10\c\Data”
这不起作用,这就是我提出问题的原因。例外消息是:{“对象必须是根目录(\'C:\\”)或驱动器号(\'C\”)。}
我希望您能帮助我。如所示:
使用winapi函数GetDiskFreeSpaceEx
确定UNC(网络)路径上的可用空间。例如,创建一个名为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();
}
}
}
正如您所看到的,这与上面链接的问题中的代码完全相同,只是将其分解为一个类,再加上正确的,使用
指令编译而没有错误。所有学分归
WMI似乎无法处理网络共享上的可用空间。
但对于本地磁盘,Windows管理界面是一种选择:
如果您将共享位置添加为映射驱动器并检查其可用空间,该怎么办?@dotctor-mapped-drives可以工作,但我只得到字符串(我对此没有影响)。该字符串在大多数情况下都是IP,我无法将每个IP添加为映射驱动器。程序映射太长,因为每次获取字符串时都必须创建它,并在保存完成后将其溶解。(我不得不这么做,因为我有可能得到很多不同的IP)WMI有点棘手,但我认为你可以要求使用它的可用空间。看看这个问题。它正在使用localhost,但您可以提取IP。我知道唯一不能做的事情是将UNC转换为远程计算机中的实际本地路径,除非您具有管理员权限,因此如果远程计算机有多个驱动器,它可能无法工作。这适用于映射的驱动器,但不适用于没有映射的IP地址。很遗憾,这在我的情况下不起作用对不起,这对你不起作用。或者,您也可以使用GetDiskFreeSpaceEx winapi函数:请参见[DLLImport]变量的工作原理!谢谢你能制定一个答案让我接受吗?只是编辑了我的答案并链接到现有的问题。我不确定,这不是一个重复的链接问题吗?如果是的话,我们应该标记它吗?不一定。他想要一个文件夹或映射驱动器。我想通过IP地址连接到文件夹,而不是映射或本地驱动器。我改变了我的问题,这样问题就清楚了