如何确定远程驱动器是否有足够的空间让我在.Net中使用C#上传给定文件?
有两种可能的解决方案.
调用Win32函数GetDiskFreeSpaceEx.这是一个示例程序:
internal static class Win32 { [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] internal static extern bool GetDiskFreeSpaceEx(string drive, out long freeBytesForUser, out long totalBytes, out long freeBytes); } class Program { static void Main(string[] args) { long freeBytesForUser; long totalBytes; long freeBytes; if (Win32.GetDiskFreeSpaceEx(@"\\prime\cargohold", out freeBytesForUser, out totalBytes, out freeBytes)) { Console.WriteLine(freeBytesForUser); Console.WriteLine(totalBytes); Console.WriteLine(freeBytes); } } }
使用系统管理界面.这篇文章中有另一个答案描述了这一点.此方法实际上设计用于脚本语言,如PowerShell.它只是为了获得正确的物体而执行大量的绒毛.最后,我怀疑,这种方法归结为调用GetDiskFreeSpaceEx.
任何在C#中进行任何严肃的Windows开发的人都可能最终会调用许多Win32函数..NET框架不能覆盖100%的Win32 API.任何大型程序都可以快速发现只能通过Win32 API提供的.NET库中的空白.我会得到一个.NET的Win32包装器,并将其包含在您的项目中.这将使您可以即时访问几乎所有Win32 API.
使用WMI
using System.Management; // Get all the network drives (drivetype=4) SelectQuery query = new SelectQuery("select Name, VolumeName, FreeSpace from win32_logicaldisk where drivetype=4"); ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); foreach (ManagementObject drive in searcher.Get()) { string Name = (string)drive["Name"]; string VolumeName = (string)drive["VolumeName"]; UInt64 freeSpace = (UInt64)drive["FreeSpace"]; }
基于(被盗)http://www.dreamincode.net/code/snippet1576.htm