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,可为什么取不出来呢?

解决方案 »

  1.   

    to :gufengduyu(聪明的呆呆龙)GetDiskFreeSpaceEx("d:",i1,i2,i3);
    printf("%d",i2); // =0;
      

  2.   

    unsigned __int64 i1,i2,i3;
    GetDiskFreeSpaceEx("d:",i1,i2,i3);
    printf("%I64u"i2);
      

  3.   

    To :lygfqy(风清扬)
    自己回家试试再来说。
      

  4.   

    unsigned __int64 i1,i2,i3;
    GetDiskFreeSpaceEx("d:",(PULARGE_INTEGER)&i1,(PULARGE_INTEGER)&i2,(PULARGE_INTEGER)&i3);
    printf("%I64u",i2);
    sorry写的急了点
      

  5.   

    To :lygfqy(风清扬)不是那问题,根本不好使。
    你可以试试。
      

  6.   

    Windows 95 OSR2 and Windows 98: The GetDiskFreeSpaceEx function is available beginning with Windows 95 OEM Service Release 2 (OSR2). To determine whether GetDiskFreeSpaceEx is available, call GetModuleHandle to get the handle to Kernel32.dll. Then you can call GetProcAddress.The following code fragment shows one way to do this:pGetDiskFreeSpaceEx = GetProcAddress( GetModuleHandle("kernel32.dll"),
                             "GetDiskFreeSpaceExA");if (pGetDiskFreeSpaceEx)
    {
       fResult = pGetDiskFreeSpaceEx (pszDrive,
                    (PULARGE_INTEGER)&i64FreeBytesToCaller,
                    (PULARGE_INTEGER)&i64TotalBytes,
                    (PULARGE_INTEGER)&i64FreeBytes);// Process GetDiskFreeSpaceEx results.
    }
    msdn上的描述
    不好用?我在程序中确实使用了这个函数,而且在98下也没有问题!!
    你跟一下函数的返回值,看看函数是否成功先,你使用的系统是...??
      

  7.   

    #include <windows.h>
    #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;
    }你运行这段代码试试,不可以,那就是你系统有问题了
      

  8.   

    unsigned __int64 i1,i2,i3;
    GetDiskFreeSpaceEx("d:",(PULARGE_INTEGER)&i1,(PULARGE_INTEGER)&i2,(PULARGE_INTEGER)&i3);
    TRACE("%I64u",i2);
    可以啊,没有问题啊
      

  9.   

    那也太奇怪了
    int hr;
    hr = GetDiskFreeSpaceEx("d:",(PULARGE_INTEGER)&i1,(PULARGE_INTEGER)&i2,(PULARGE_INTEGER)&i3);
    看看返回值
    或者直接用getlasterror看看为什么函数出问题
    第二点,你把D:换成c:(是不是你的d:盘有什么问题?)
      

  10.   

    @@@@@@@@@@@@@@@@@@@@@@@@@@@@ 楼主结贴 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@多谢各位的大力帮助,有对不住的地方请见谅。
    这个问题正如大家说的,什么都没错。只是我的程序显示有问题,我听取大家的意见跟踪了一下,我靠,发现问题了。可想不通,问题如下,有兴趣的可看看,试试。(注:我已经改用了别的方法,下面的是原始程序,请大家赐教)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);
      

  11.   

    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 楼主结 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    问题解决了,正如大家所说,哪都没错。只是我的显示函数有问题,已经改过了。这是我以前的程序,想不通为什么,请大家赐教。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);