BOOL GetDiskFreeSpaceEx(
LPCTSTR lpDirectoryName, // pointer to the directory name
PULARGE_INTEGER lpFreeBytesAvailableToCaller, // receives the number of bytes on
// disk available to the caller
PULARGE_INTEGER lpTotalNumberOfBytes, // receives the number of bytes on disk
PULARGE_INTEGER lpTotalNumberOfFreeBytes // receives the free bytes on disk
);这是msdn中的定义,我现在想得到某一个磁盘的总容量。应该是第3个参数lpTotalNumberOfBytes,可为什么取不出来呢?
LPCTSTR lpDirectoryName, // pointer to the directory name
PULARGE_INTEGER lpFreeBytesAvailableToCaller, // receives the number of bytes on
// disk available to the caller
PULARGE_INTEGER lpTotalNumberOfBytes, // receives the number of bytes on disk
PULARGE_INTEGER lpTotalNumberOfFreeBytes // receives the free bytes on disk
);这是msdn中的定义,我现在想得到某一个磁盘的总容量。应该是第3个参数lpTotalNumberOfBytes,可为什么取不出来呢?
解决方案 »
- 拦截所有IP包
- 关于WebBrowser控件的问题
- 字体显示问题
- 调用ORACLE存储过程的时候,能不能简单的使用“execute up_NDr2_SaveRecord @Computer =aaa,@DevID=bbb”
- STL中的list是否是线程安全的?
- twofish
- 简单问题,只是想明白一点。
- 一头小菜鸟对于本精华区文章的疑惑
- 请教,来者有份,200分大放送,
- 看过<inside com>以及熟悉cl.exe的请进。
- 我用DAO建立数据库文件运行期怎么总有问题
- 急!!1个comlib中有2个coclass,可以不能相互使用。为何??(编译器提示cannot instantiate abstract class )
printf("%d",i2); // =0;
GetDiskFreeSpaceEx("d:",i1,i2,i3);
printf("%I64u"i2);
自己回家试试再来说。
GetDiskFreeSpaceEx("d:",(PULARGE_INTEGER)&i1,(PULARGE_INTEGER)&i2,(PULARGE_INTEGER)&i3);
printf("%I64u",i2);
sorry写的急了点
你可以试试。
"GetDiskFreeSpaceExA");if (pGetDiskFreeSpaceEx)
{
fResult = pGetDiskFreeSpaceEx (pszDrive,
(PULARGE_INTEGER)&i64FreeBytesToCaller,
(PULARGE_INTEGER)&i64TotalBytes,
(PULARGE_INTEGER)&i64FreeBytes);// Process GetDiskFreeSpaceEx results.
}
msdn上的描述
不好用?我在程序中确实使用了这个函数,而且在98下也没有问题!!
你跟一下函数的返回值,看看函数是否成功先,你使用的系统是...??
#include <stdio.h>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
unsigned __int64 i1,i2,i3;
char buffer[MAX_PATH];
GetDiskFreeSpaceEx("d:",(PULARGE_INTEGER)&i1,(PULARGE_INTEGER)&i2,(PULARGE_INTEGER)&i3);
sprintf(buffer,"%I64u G",i2/1024/1024/1024);
MessageBox(NULL,buffer,"d盘容量",0);
exit(0);
return 1;
}你运行这段代码试试,不可以,那就是你系统有问题了
GetDiskFreeSpaceEx("d:",(PULARGE_INTEGER)&i1,(PULARGE_INTEGER)&i2,(PULARGE_INTEGER)&i3);
TRACE("%I64u",i2);
可以啊,没有问题啊
int hr;
hr = GetDiskFreeSpaceEx("d:",(PULARGE_INTEGER)&i1,(PULARGE_INTEGER)&i2,(PULARGE_INTEGER)&i3);
看看返回值
或者直接用getlasterror看看为什么函数出问题
第二点,你把D:换成c:(是不是你的d:盘有什么问题?)
这个问题正如大家说的,什么都没错。只是我的程序显示有问题,我听取大家的意见跟踪了一下,我靠,发现问题了。可想不通,问题如下,有兴趣的可看看,试试。(注:我已经改用了别的方法,下面的是原始程序,请大家赐教)CString GetDisk(char *disk)
{
_ULARGE_INTEGER result_freespace,result_totalspace,result_g;
CString disk_space;
int error = 0; /* Get free space */
GetDiskFreeSpaceEx(disk,&result_freespace,&result_totalspace,&result_g);
if (error != 0)
{
CString t;
t.Format("GetDiskFreeSpace() error=%d",error);
AfxMessageBox(t);
} result_freespace.QuadPart = result_freespace.QuadPart/1024/1024;
result_totalspace.QuadPart = result_totalspace.QuadPart/1024/1024;
/* 不知为什么,经转化成字符串后,第二个数总为零 */
disk_space.Format("%dM/ %dM",result_totalspace.QuadPart,result_totalspace.QuadPart); return disk_space;
}调用形式:CString space = GetDisk("d:");
AfxMessageBox(space);
问题解决了,正如大家所说,哪都没错。只是我的显示函数有问题,已经改过了。这是我以前的程序,想不通为什么,请大家赐教。CString CInfoshowDlg::GetDisk(char *disk)
{
_ULARGE_INTEGER result_freespace,result_totalspace,result_g;
CString disk_space;
int error = 0; /* Get free space */
GetDiskFreeSpaceEx(disk,&result_freespace,&result_totalspace,&result_g);
if (error != 0)
{
CString t;
t.Format("GetDiskFreeSpace() error=%d",error);
AfxMessageBox(t);
} result_freespace.QuadPart = result_freespace.QuadPart/1024/1024;
result_totalspace.QuadPart = result_totalspace.QuadPart/1024/1024;
/* 经转化成字符串后,为什么第2个数是零呢? */
disk_space.Format("%dM/ %dM",result_freespace.QuadPart,result_totalspace.QuadPart); return disk_space;
}
调用形式: CString space = GetDisk("d:");
AfxMessageBox(space);