请问怎样可以得到指定盘符的空间大小和已用空间大小(或可用空间大小)?? (二) BOOL MoveFile(LPCTSTR lpExistingFileName,LPCTSTR lpNewFileName); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BOOL DeleteFile(LPCTSTR lpFileName); BOOL GetDiskFreeSpace( LPCTSTR lpRootPathName, // root path LPDWORD lpSectorsPerCluster, // sectors per cluster LPDWORD lpBytesPerSector, // bytes per sector LPDWORD lpNumberOfFreeClusters, // free clusters LPDWORD lpTotalNumberOfClusters // total clusters); (一):#include "stdafx.h"#ifndef _INC_TCHAR #include <TCHAR.H>#endif // _INC_TCHAR#include <LoadLibrary.h>extern __int64 RealGetDiskFreeSpace( LPCTSTR pcszPath );//// Typedefs for ANSI and UNICODE versionstypedef WINBASEAPI BOOL ( WINAPI *GETDISKFREESPACEEXW) ( LPCWSTR lpDirectoryName , PULARGE_INTEGER lpFreeBytesAvailableToCaller , PULARGE_INTEGER lpTotalNumberOfBytes , PULARGE_INTEGER lpTotalNumberOfFreeBytes );typedef WINBASEAPI BOOL ( WINAPI *GETDISKFREESPACEEXA) ( LPCSTR lpDirectoryName , PULARGE_INTEGER lpFreeBytesAvailableToCaller , PULARGE_INTEGER lpTotalNumberOfBytes , PULARGE_INTEGER lpTotalNumberOfFreeBytes );#ifdef UNICODE #define GETDISKFREESPACEEX GETDISKFREESPACEEXW #define GETDISKFREESPACEEX_NAME "GetDiskFreeSpaceExW"#else // UNICODE #define GETDISKFREESPACEEX GETDISKFREESPACEEXA #define GETDISKFREESPACEEX_NAME "GetDiskFreeSpaceExA"#endif // UNICODE__int64 RealGetDiskFreeSpace( LPCTSTR pcszPath ){ CLoadLibrary lib( _T("KERNEL32.DLL") ); if( lib.IsLoaded() ) { GETDISKFREESPACEEX pGetDiskFreeSpaceEx = reinterpret_cast<GETDISKFREESPACEEX>( lib.GetProcAddress( GETDISKFREESPACEEX_NAME ) ); if( pGetDiskFreeSpaceEx ) { ULARGE_INTEGER ulFreeBytesAvailableToCaller; ULARGE_INTEGER ulTotalNumberOfBytes; ULARGE_INTEGER ulTotalNumberOfFreeBytes; if( pGetDiskFreeSpaceEx( pcszPath, &ulFreeBytesAvailableToCaller, &ulTotalNumberOfBytes, &ulTotalNumberOfFreeBytes ) ) { return ulFreeBytesAvailableToCaller.QuadPart; } } } DWORD sp[ 4 ]; VERIFY( GetDiskFreeSpace( pcszPath, &sp[ 0 ], &sp[ 1 ], &sp[ 2 ], &sp[ 3 ] ) ); return sp[ 0 ] * sp[ 1 ] * sp[ 2 ];}Tested in UNICODE. __int64 RealGetDiskFreeSpace( LPCTSTR pcszPath ); Return value Returns the number of bytes free on the drive specified. Example #include "stdafx.h"#include <stdio.h>#include <TCHAR.H>extern __int64 RealGetDiskFreeSpace( LPCTSTR pcszPath );int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ LPCTSTR pcszDrive = _T("c:"); __int64 i64 = RealGetDiskFreeSpace( pcszDrive ); TCHAR szBuffer[ 256 ]; const long lKB = (long)( i64 / 1024 ); const long lMB = (long)( i64 / (1024 * 1024) ); wsprintf( szBuffer, _T("drive %s has %dKB or %dMB free"), pcszDrive, lKB, lMB ); MessageBox( NULL, szBuffer, _T("Example"), MB_OK ); return 0;} 看看Platform SDK File and I/O函数吧。得到剩余空间最好用GetDiskFreeSpaceEx。 如何才能让自己做的界面不被spy++侦测出来 spin control 控件的setPos()函数 有关服务器和多客户端通信的问题!帮忙 请教用ado连接含有blob字段的access数据库的问题 用设备上下文的TextOut 输出文字之后,怎么把输出文字变得透明? 关于视图的问题! 如何实现计算器的小数运算>? VC6用DAO方式连接Access2000数据的问题 一个关于非模态对话框的问题 新手求教! Please send to me "PE format",thank you and I'll give you Mark! 关于SetTimer的问题
LPCTSTR lpRootPathName, // root path
LPDWORD lpSectorsPerCluster, // sectors per cluster
LPDWORD lpBytesPerSector, // bytes per sector
LPDWORD lpNumberOfFreeClusters, // free clusters
LPDWORD lpTotalNumberOfClusters // total clusters
);
#include "stdafx.h"
#ifndef _INC_TCHAR
#include <TCHAR.H>
#endif // _INC_TCHAR
#include <LoadLibrary.h>
extern __int64 RealGetDiskFreeSpace( LPCTSTR pcszPath );
//
// Typedefs for ANSI and UNICODE versions
typedef WINBASEAPI BOOL ( WINAPI *GETDISKFREESPACEEXW) ( LPCWSTR lpDirectoryName
, PULARGE_INTEGER lpFreeBytesAvailableToCaller
, PULARGE_INTEGER lpTotalNumberOfBytes
, PULARGE_INTEGER lpTotalNumberOfFreeBytes );typedef WINBASEAPI BOOL ( WINAPI *GETDISKFREESPACEEXA) ( LPCSTR lpDirectoryName
, PULARGE_INTEGER lpFreeBytesAvailableToCaller
, PULARGE_INTEGER lpTotalNumberOfBytes
, PULARGE_INTEGER lpTotalNumberOfFreeBytes );#ifdef UNICODE
#define GETDISKFREESPACEEX GETDISKFREESPACEEXW
#define GETDISKFREESPACEEX_NAME "GetDiskFreeSpaceExW"
#else // UNICODE
#define GETDISKFREESPACEEX GETDISKFREESPACEEXA
#define GETDISKFREESPACEEX_NAME "GetDiskFreeSpaceExA"
#endif // UNICODE__int64 RealGetDiskFreeSpace( LPCTSTR pcszPath )
{
CLoadLibrary lib( _T("KERNEL32.DLL") );
if( lib.IsLoaded() )
{
GETDISKFREESPACEEX pGetDiskFreeSpaceEx = reinterpret_cast<GETDISKFREESPACEEX>( lib.GetProcAddress( GETDISKFREESPACEEX_NAME ) );
if( pGetDiskFreeSpaceEx )
{
ULARGE_INTEGER ulFreeBytesAvailableToCaller;
ULARGE_INTEGER ulTotalNumberOfBytes;
ULARGE_INTEGER ulTotalNumberOfFreeBytes;
if( pGetDiskFreeSpaceEx( pcszPath, &ulFreeBytesAvailableToCaller, &ulTotalNumberOfBytes, &ulTotalNumberOfFreeBytes ) )
{
return ulFreeBytesAvailableToCaller.QuadPart;
}
}
} DWORD sp[ 4 ];
VERIFY( GetDiskFreeSpace( pcszPath, &sp[ 0 ], &sp[ 1 ], &sp[ 2 ], &sp[ 3 ] ) );
return sp[ 0 ] * sp[ 1 ] * sp[ 2 ];
}Tested in UNICODE. __int64 RealGetDiskFreeSpace( LPCTSTR pcszPath ); Return value Returns the number of bytes free on the drive specified. Example
#include "stdafx.h"
#include <stdio.h>
#include <TCHAR.H>
extern __int64 RealGetDiskFreeSpace( LPCTSTR pcszPath );
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
LPCTSTR pcszDrive = _T("c:");
__int64 i64 = RealGetDiskFreeSpace( pcszDrive ); TCHAR szBuffer[ 256 ];
const long lKB = (long)( i64 / 1024 );
const long lMB = (long)( i64 / (1024 * 1024) );
wsprintf( szBuffer, _T("drive %s has %dKB or %dMB free"), pcszDrive, lKB, lMB );
MessageBox( NULL, szBuffer, _T("Example"), MB_OK );
return 0;
}