发信人: tjam() 
整理人: wenbobo(2002-12-27 15:55:46), 站内信件
 | 
 
 
BOOL GetDiscFreeSpace(LPCTSTR lpszPath, DWORDLONG* pnFree)
 {
    BOOL bRet = FALSE;
 
    // We need to determine whether GetDiskFreeSpaceEx is available by  calling LoadLibrary
    // or LoadLibraryEx, to load Kernel32.DLL, and then calling the Get ProcAddress to
    // obtain an address for GetDiskFreeSpaceEx.  If GetProcAddress fai ls, or if
    // GetDiskFreeSpaceEx fails with the ERROR_CALL_NOT_IMPLEMENTED cod e, we use the
    // GetDiskFreeSpace function instead.	
    
    HINSTANCE hInstance = LoadLibrary("KERNEL32.DLL");
 
    if(hInstance)	// If we got the library
    {		
 
      typedef BOOL (FAR WINAPI *MYFARPROC)(LPCSTR,ULARGE_INTEGER*,ULARG E_INTEGER*,ULARGE_INTEGER*);
      MYFARPROC lpfnDLLProc=NULL;
      //(LPCSTR,ULARGE_INTEGER*,ULARGE_INTEGER*,ULARGE_INTEGER*);
      //= NULL;
 		
      lpfnDLLProc = (MYFARPROC)GetProcAddress(hInstance, "GetDiskFreeSp aceExA");
 		
      if(lpfnDLLProc)	// If we got an address to the function
      {	
 	ULARGE_INTEGER nTotalBytes, nTotalFreeBytes, nTotalAvailable;
 
 	if((*lpfnDLLProc)(lpszPath, &nTotalAvailable, &nTotalBytes, &nTotalFr eeBytes))
 //	  if(GetDiskFreeSpaceEx(lpszPath, &nTotalAvailable, &nTotalBytes, & nTotalFreeBytes))
 	  {
 	     *pnFree = nTotalAvailable.QuadPart;
 	     bRet = TRUE;
             }		
       }
 
 	FreeLibrary(hInstance);
    }
 
 	if(!bRet)	// We have to try and use GetDiskFreeSpace()	
 	{
             ULONG secpercluster, bytespersec, nooffreeclusters, totaln oofclusters;	
 
 	   if(GetDiskFreeSpace(lpszPath, &secpercluster, &bytespersec,
 	      &nooffreeclusters, &totalnoofclusters))
 	   {
 	      *pnFree = (nooffreeclusters * secpercluster * bytespersec);
 	      bRet = TRUE;
 	    }				
 	}
 
     return bRet;
 }
  -- 春风再美也比不上你的笑,
 没见过你的人不会明了!
 -- 
  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 ^v^ Name:James Tan                ^o^
 ^v^ E-mail:[email protected]  ^o^
  ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.101.14.205]
  | 
 
 
 |