问题描述
usingSystem;usingSystem.Runtime.InteropServices;classMainClass{[DllImport("User32.dll")]publicstaticexternintMessageBox(inth,stringm,stringc,inttype);[DllImport("Kernel32.dll")]publicstaticexternSystem.Int32GetDiskFreeSpace(refstringpathname,System.Int32n1,System.Int32n2,System.Int32n3,System.Int32n4);staticintMain(){stringpath="C:\";System.Int32i=0,j=0,k=0,l=0;longn=GetDiskFreeSpace(refpath,i,j,k,l);stringmyString="磁盘可用空间为:"+GetDiskFreeSpace(refpath,i,j,k,l);returnMessageBox(0,myString,"MyMessageBox",0);}}为什么GetDiskFreeSpace返回值为0即调用失败?
解决方案
解决方案二:
[DllImport("kernel32.dll",EntryPoint="GetDiskFreeSpaceExA")]publicstaticexternintGetDiskFreeSpaceEx(stringlpRootPathName,outlonglpFreeBytesAvailable,outlonglpTotalNumberOfBytes,outlonglpTotalNumberOfFreeBytes);Usage:longa,b,c;GetDiskFreeSpaceEx(@"D:",outa,outb,outc);
解决方案三:
可以不用API,而用WMI来获得磁盘空间信息。MessageBox()API可以用System.Windows.Form.MessageBox.Show()来完成。usingSystem;usingSystem.Windows.Form;//要添加System.Windows.Form引用usingSystem.Management;//要添加System.Management引用//...publicvoidTest(){ManagementObjectdisk=newManagementObject("win32_logicaldisk.deviceid="c:"");disk.Get();Console.WriteLine("LogicalDiskSize="+disk["Size"]+"bytes");Console.WriteLine("LogicalDiskFreeSpace="+disk["FreeSpace"]+"bytes");System.Windows.Form.MessageBox.Show("hello");}
至于GetDiskFreeSpace()API,第一个参数有错误,用string就可以了,而不要用refstring。
解决方案四:
stringmyString="磁盘可用空间为:"+GetDiskFreeSpace(path,i,j,k,l);
解决方案五:
没有用过外部函数,先顶一下
解决方案六:
2楼说的对