C#中利用API获取磁盘可用空间的问题

efpsy 2008-07-12 06:00:13

using System;
using System.Runtime.InteropServices;
class MainClass
{
[DllImport("User32.dll")]
public static extern int MessageBox(int h, string m, string c, int type);
[DllImport("Kernel32.dll")]
public static extern System.Int32 GetDiskFreeSpace(ref string pathname, System.Int32 n1, System.Int32 n2, System.Int32 n3, System.Int32 n4);
static int Main()
{
string path="C:\\";
System.Int32 i=0, j=0, k=0, l=0;
long n= GetDiskFreeSpace(ref path,i,j,k,l );
string myString = "磁盘可用空间为:" + GetDiskFreeSpace(ref path,i,j,k,l );
return MessageBox(0, myString, "My Message Box", 0);
}


}
为什么GetDiskFreeSpace返回值为0即调用失败?

...全文
278 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
JeffChung 2008-07-12
  • 打赏
  • 举报
回复
2楼说的对
panwen516 2008-07-12
  • 打赏
  • 举报
回复
没有用过外部函数,先顶一下
changjiangzhibin 2008-07-12
  • 打赏
  • 举报
回复
string myString = "磁盘可用空间为:" + GetDiskFreeSpace(path,i,j,k,l );
gomoku 2008-07-12
  • 打赏
  • 举报
回复
可以不用API,而用WMI来获得磁盘空间信息。
MessageBox()API可以用System.Windows.Form.MessageBox.Show()来完成。


using System;
using System.Windows.Form; // 要添加System.Windows.Form引用
using System.Management; // 要添加System.Management引用
//...

public void Test()
{
ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");
disk.Get();
Console.WriteLine("Logical Disk Size = " + disk["Size"] + " bytes");
Console.WriteLine("Logical Disk FreeSpace = " + disk["FreeSpace"] + "bytes");

System.Windows.Form.MessageBox.Show( "hello" );
}


至于GetDiskFreeSpace()API,第一个参数有错误,用string就可以了,而不要用ref string。
beancurd005 2008-07-12
  • 打赏
  • 举报
回复
[DllImport("kernel32.dll", EntryPoint="GetDiskFreeSpaceExA")]
public static extern int GetDiskFreeSpaceEx (
string lpRootPathName,
out long lpFreeBytesAvailable,
out long lpTotalNumberOfBytes,
out long lpTotalNumberOfFreeBytes
);

Usage:
long a,b,c;
GetDiskFreeSpaceEx(@"D:\",out a,out b,out c);

110,896

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧