我知道,AvailableFreeSpace可以用于本地驱动器,例如" C:/"," D:/"等等 它也适用于网络驱动器。
但现在我的问题是:
是否可以查看"文件夹"的AvailableFreeSpace?在另一个IP? 我使用以下代码连接到本地驱动器:
System.IO.DriveInfo _DriveInfo = new DriveInfo(SaveLocation);
当" SaveLocation"是一个本地驱动器,如" C:\ Temp \ Folder",它可以正常工作。
但是当内部有一个IP" SaveLocation"它没有用。在这种情况下,SaveLocation看起来像这样:" 192.168.200.10 \ c \ Data"
这不起作用,这就是我提问的原因。 Exceptionmessage是:{"对象必须是根目录(\" C:\\")或驱动器号(\" C \")。&# 34;}
我希望你能帮助我。
答案 0 :(得分:3)
如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