GetDiskFreeSpaceEx函数的有关问题
GetDiskFreeSpaceEx函数的问题。
请问如何将GetDiskFreeSpaceEx函数中返回的64位无整型数转化为小数输出。 例如我现在C盘的总容量为9.75G,但是调用该函数是以字节为单位返回的,这是一个很大的数,我将这个数除以1073741824(1024的3次方)得到的是9,可是我想得到的是9.75,我在MSDN中找到了一个__atoi64的函数,好像也不行。请问有没有64位的float型,如果有它和64位无整型函数应如何转换。以下是我的代码,最后得到的是一个整数。
//定义变量
ULARGE_INTEGER nTotalBytes;
ULARGE_INTEGER nFreeBytes;
ULARGE_INTEGER nFreeByteOfTotal;
//调用函数以获得硬盘C分区的信息,为方便我没的使用判断函数调用是否成功。
::GetDiskFreeSpaceEx(_T("C:"),&nFreeBytes,&nTotalBytes,&nFreeByteOfTotal);
//定义变量用于接收C分区总大小,以字节为单位
__int64 i64TotalBytes = nTotalBytes.QuadPart;
//将字节转换为GB
i64TotalBytes = i64TotalBytes / 1073741824;
//转成字符串形式以便显示输出
char chT[10];
sprintf(chT,"你的C盘大小为:%I64u GB",i64TotalBytes);
//显示结果
MessageBox(chT);
------解决方案--------------------
//定义变量用于接收C分区总大小,以字节为单位
float i64TotalBytes = nTotalBytes.QuadPart;
//将字节转换为GB
i64TotalBytes = i64TotalBytes / 1073741824;
//转成字符串形式以便显示输出
char chT[10];
sprintf(chT,"你的C盘大小为:%f GB",i64TotalBytes);
------解决方案--------------------
有一个折衷的方法
__int64 a = i64TotalBytes / 1073741824;
double b = (double)i64TotalBytes - a * 1073741824;
double c = a + b / 1073741824;
char chT[10];
sprintf(chT,"你的C盘大小为:%02f GB",c);
当然还有一个更简单的方法,使用一个API就行了StrFormatByteSize64
用法你去查一下MSDN就知道了!
------解决方案--------------------
//将字节转换为GB
float GB;
GB = i64TotalBytes / 1073741824.0;
//转成字符串形式以便显示输出
char chT[100];
sprintf(chT,"你的C盘大小为:%.1f GB",GB);
//显示结果
MessageBox(chT);
------解决方案--------------------
更改上面说的,double可以直接表示__int64的,没必要那么麻烦
直接double a = (double)i64TotalBytes就行了!
------解决方案--------------------
这样试试:
请问如何将GetDiskFreeSpaceEx函数中返回的64位无整型数转化为小数输出。 例如我现在C盘的总容量为9.75G,但是调用该函数是以字节为单位返回的,这是一个很大的数,我将这个数除以1073741824(1024的3次方)得到的是9,可是我想得到的是9.75,我在MSDN中找到了一个__atoi64的函数,好像也不行。请问有没有64位的float型,如果有它和64位无整型函数应如何转换。以下是我的代码,最后得到的是一个整数。
//定义变量
ULARGE_INTEGER nTotalBytes;
ULARGE_INTEGER nFreeBytes;
ULARGE_INTEGER nFreeByteOfTotal;
//调用函数以获得硬盘C分区的信息,为方便我没的使用判断函数调用是否成功。
::GetDiskFreeSpaceEx(_T("C:"),&nFreeBytes,&nTotalBytes,&nFreeByteOfTotal);
//定义变量用于接收C分区总大小,以字节为单位
__int64 i64TotalBytes = nTotalBytes.QuadPart;
//将字节转换为GB
i64TotalBytes = i64TotalBytes / 1073741824;
//转成字符串形式以便显示输出
char chT[10];
sprintf(chT,"你的C盘大小为:%I64u GB",i64TotalBytes);
//显示结果
MessageBox(chT);
------解决方案--------------------
//定义变量用于接收C分区总大小,以字节为单位
float i64TotalBytes = nTotalBytes.QuadPart;
//将字节转换为GB
i64TotalBytes = i64TotalBytes / 1073741824;
//转成字符串形式以便显示输出
char chT[10];
sprintf(chT,"你的C盘大小为:%f GB",i64TotalBytes);
------解决方案--------------------
有一个折衷的方法
__int64 a = i64TotalBytes / 1073741824;
double b = (double)i64TotalBytes - a * 1073741824;
double c = a + b / 1073741824;
char chT[10];
sprintf(chT,"你的C盘大小为:%02f GB",c);
当然还有一个更简单的方法,使用一个API就行了StrFormatByteSize64
用法你去查一下MSDN就知道了!
------解决方案--------------------
//将字节转换为GB
float GB;
GB = i64TotalBytes / 1073741824.0;
//转成字符串形式以便显示输出
char chT[100];
sprintf(chT,"你的C盘大小为:%.1f GB",GB);
//显示结果
MessageBox(chT);
------解决方案--------------------
更改上面说的,double可以直接表示__int64的,没必要那么麻烦
直接double a = (double)i64TotalBytes就行了!
------解决方案--------------------
这样试试:
- C/C++ code
double gb = (double)nTotalBytes.QuadPart / 0x40000000; char chT[20]; sprintf(chT, "你的C盘大小为:%.2Lf GB", gb);
------解决方案--------------------
/** 计算某个磁盘剩余空间*/
void CPublicData::FreeDiskSpace(char drive)
{
_ULARGE_INTEGER lpTotalFreeBytes;
_ULARGE_INTEGER lpTotalNumberOfBytes;
_ULARGE_INTEGER lpTotalNumberOfFreeBytes;
TCHAR szRoot[4];
sprintf(szRoot,"%c:\\",drive);
GetDiskFreeSpaceEx(szRoot,
&lpTotalFreeBytes,
&lpTotalNumberOfBytes,
&lpTotalNumberOfFreeBytes
);
m_totalFreeSpace = lpTotalNumberOfFreeBytes.QuadPart / (1024 *1024);
}