Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过IP地址查看驱动器的可用可用空间_C#_Driveinfo - Fatal编程技术网

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

C# 通过IP地址查看驱动器的可用可用空间,c#,driveinfo,C#,Driveinfo,我知道,AvailableFreeSpace可以用于本地驱动器,如“C:/”和“D:/”等。 它也适用于网络驱动器 但现在我的问题是: 是否可以在另一个IP上查看“文件夹”的可用空间? 我使用以下代码连接到本地驱动器: System.IO.DriveInfo _DriveInfo = new DriveInfo(SaveLocation); 当“SaveLocation”是一个像“C:\Temp\Folder”这样的本地驱动器时,它工作正常 但当“SaveLocation”中有IP时,它就不起

我知道,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\”)。}

我希望您能帮助我。

如所示:

使用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地址连接到文件夹,而不是映射或本地驱动器。我改变了我的问题,这样问题就清楚了