【问题标题】:See the AvailableFreeSpace of drives via IP-Address通过 IP 地址查看驱动器的 AvailableFreeSpace
【发布时间】:2017-03-03 09:19:55
【问题描述】:

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

但现在我的问题是:

是否可以在另一个 IP 上查看“文件夹”的可用空闲空间? 我使用以下代码连接到本地驱动器:

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

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

但是当“SaveLocation”中有 IP 时,它就不起作用了。 SaveLocation 在这种情况下看起来像这样:“192.168.200.10\c\Data”

这不起作用,这就是我提出问题的原因。异常消息是:{"对象必须是根目录 (\"C:\\") 或驱动器号 (\"C\")。"}

我希望你能帮助我。

【问题讨论】:

  • 如果您将共享位置添加为映射驱动器并检查其可用空间会怎样?
  • @dotctor 映射驱动器有效,但我只得到字符串(我对此没有影响)。该字符串大部分时间都是 IP,我无法将获得的每个 IP 添加为映射驱动器。编程映射很长,因为我每次获取字符串时都必须创建它,并在保存完成后将其解散。 (我必须这样做,因为我有可能获得很多不同的 IP)
  • WMI 有点棘手,但我认为您可以要求使用它的可用空间。看看这个问题stackoverflow.com/questions/1412395/…。它使用 localhost 但您可以提取 IP。我知道唯一不能做的就是将 UNC 转换为远程机器中的实际本地路径,除非你有管理员权限,所以如果远程机器有多个驱动器,它可能无法工作。

标签: c# driveinfo


【解决方案1】:

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

使用 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();
            }
        }
    }

如您所见,这与上面链接的问题中的代码完全相同,只是将其分解为一个类加上正确的 using 指令以编译而不会出错。所有学分转到https://stackoverflow.com/users/995926/rekire

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

【讨论】:

  • 这适用于映射驱动器,但不适用于没有映射的 IP 地址。很遗憾,这在我的情况下不起作用
  • 抱歉,这对您不起作用。或者,您也可以使用 GetDiskFreeSpaceEx winapi 函数:msdn.microsoft.com/de-de/library/windows/desktop/… See stackoverflow.com/questions/14465187/…
  • [DLLImport] 变体有效!谢谢!你能制定一个答案让我接受吗?
  • 刚刚用现有问题的链接编辑了我的答案。我不确定,这不是链接问题的重复吗?如果是这样,我们应该标记它吗?
  • 不一定。他想要一个文件夹或映射驱动器。我想通过 IP 地址连接到文件夹,而不是映射或本地驱动器。我改变了我的问题,所以它可能很清楚
猜你喜欢
  • 2021-09-06
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多