Win32 获取磁盘剩余空间+遍历文件目录+wchar_t与char互转
来源:互联网 发布:王者归来流量软件 编辑:程序博客网 时间:2024/06/06 08:40
WINBASEAPI
BOOL
WINAPI
GetDiskFreeSpaceExA(
__in_opt LPCSTR lpDirectoryName,
__out_opt PULARGE_INTEGER lpFreeBytesAvailableToCaller,
__out_opt PULARGE_INTEGER lpTotalNumberOfBytes,
__out_opt PULARGE_INTEGER lpTotalNumberOfFreeBytes
);
WINBASEAPI
BOOL
WINAPI
GetDiskFreeSpaceExW(
__in_opt LPCWSTR lpDirectoryName,
__out_opt PULARGE_INTEGER lpFreeBytesAvailableToCaller,
__out_opt PULARGE_INTEGER lpTotalNumberOfBytes,
__out_opt PULARGE_INTEGER lpTotalNumberOfFreeBytes
);
#ifdef UNICODE
#define GetDiskFreeSpaceEx GetDiskFreeSpaceExW
#else
#define GetDiskFreeSpaceEx GetDiskFreeSpaceExA
#endif // !UNICODE
lpDirectoryName是驱动器的名称。
lpFreeBytesAvailableToCaller是用户可用的磁盘空间。
lpTotalNumberOfBytes是磁盘总共的空间。
lpTotalNumberOfFreeBytes是磁盘空闲的空间。以上都是字节为单位。
//跟别的兄台一样,客户说我写的软件会有数据丢失,后来发现是没有做硬盘剩余空间的检测,//不管有N多数据,照单全收,无一漏网。。//以下代码补上之后,再加一个提示对话框就比较保险了。。void DiskFree(void){ // ULARGE_INTEGER nFreeBytesAvailable; ULARGE_INTEGER nTotalNumberOfBytes; ULARGE_INTEGER nTotalNumberOfFreeBytes; // if (GetDiskFreeSpaceEx(_T("I:"), &nFreeBytesAvailable, &nTotalNumberOfBytes, &nTotalNumberOfFreeBytes)) { TCHAR chBuf[256]; wsprintf(chBuf,_T("Av=%I64d,Total=%I64d,Free=%I64d\r\n"), nFreeBytesAvailable, nTotalNumberOfBytes, nTotalNumberOfFreeBytes); printf("free space == %s \n",chBuf); }}注明: 我用的数据是:nFreeBytesAvailable.QuadPart.
报错:void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t *,...)
解决方案:
将strInfo.Format(" %d ",mGainParam.nHave);改为==>>
strInfo.Format(_T(" %d "),mGainParam.nHave);即可。
报错:error C2664: 'strlen' : cannot convert parameter 1 from 'LPCTSTR' to 'const char *'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
解决方案:
将nLength=strlen((LPCTSTR)strInfo); 改为:
nLength=(UINT)strlen((char *)strInfo.GetBuffer(0)); 即可.
将char转化为wchar_t型:
void c2w(wchar_t *pwstr,size_t len,const char *str){if(str){size_t nu = strlen(str);size_t n =(size_t)MultiByteToWideChar(CP_ACP,0,(const char *)str,(int)nu,0,0);if(n>=len)n=len-1;MultiByteToWideChar(CP_ACP,0,(const char *)str,(int)nu,pwstr,(int)n);pwstr[n]=0;}}
将wchar_t转化为char型:
//将wchar_t* 转成char*的实现函数如下:char *w2c(char *pcstr,const wchar_t *pwstr, size_t len){int nlength=wcslen(pwstr);//获取转换后的长度int nbytes = WideCharToMultiByte( 0, // specify the code page used to perform the conversion0, // no special flags to handle unmapped characterspwstr, // wide character string to convertnlength, // the number of wide characters in that stringNULL, // no output buffer given, we just want to know how long it needs to be0,NULL, // no replacement character givenNULL ); // we don't want to know if a character didn't make it through the translation// make sure the buffer is big enough for this, making it larger if necessaryif(nbytes>len) nbytes=len;// 通过以上得到的结果,转换unicode 字符为ascii 字符WideCharToMultiByte( 0, // specify the code page used to perform the conversion0, // no special flags to handle unmapped characterspwstr, // wide character string to convertnlength, // the number of wide characters in that stringpcstr, // put the output ascii characters at the end of the buffernbytes, // there is at least this much space thereNULL, // no replacement character givenNULL );return pcstr ;}
对于CString类型的字符写入,最好使用WriteString函数,如果像我这块土豆一样,用Write,否则会出现写一个字符,中间空一格。
也就是Unicode字符。
SeekToBegin(); //到达文件开头
SeekToEnd(); //到达文件尾
下面这个代码是遍历某个目录下所有文件,并对特定格式的文件进行处理的一个实例:
void FindAllFile(CString pSourcePathString){CFileFind finder;CFile tmpFile;ULONGLONG fileLen;CString filepath;CString filename;BYTE *data =NULL;CString tmpDir=pSourcePathString + _T("\\*.ex");BOOL ret=finder.FindFile(tmpDir);while(ret){ret=finder.FindNextFile();if(finder.IsDots())continue;if (finder.IsDirectory()){printf("find a directory ! \n");}else{// 下面就是我们对匹配的文件做处理...filename=finder.GetFileName();filepath=finder.GetFilePath();tmpFile.Open(filepath,CFile::modeRead);fileLen=tmpFile.GetLength();//获取file文件中内容的长度;//CheckDiskFree(pDestPathString,fileLen);// 写入记录信息。//LogFile.SeekToEnd();//LogFile.WriteString(filename);data =new BYTE[(size_t)fileLen+1];//定义一个存放数据的指针;memset(data ,0,(size_t)fileLen+1);//将已开辟内存空间 data的,长度为len+1首 个字节的值设为值 0tmpFile.Read(data,(UINT)fileLen);//读取文件内容并赋值给data;tmpFile.Close();delete [] data;}}}
Ok ,收工。。
- Win32 获取磁盘剩余空间+遍历文件目录+wchar_t与char互转
- 获取磁盘剩余空间
- 获取磁盘剩余空间
- wince获取磁盘剩余空间
- pytho获取磁盘剩余空间
- 获取磁盘使用空间和剩余空间
- 根据目录名求磁盘剩余空间
- 通过VBS获取磁盘剩余空间
- QT获取磁盘剩余空间大小
- 获取电脑磁盘的剩余空间
- 两种方法,获取磁盘剩余空间
- 比较文件和磁盘剩余空间大小
- 获取磁盘剩余空间 Django项目几个主要文件功能的解释
- 获取磁盘使用空间和剩余空间(代码)
- 有关获取磁盘剩余空间及总空间
- 得到磁盘剩余空间
- 取得磁盘剩余空间
- 获得磁盘剩余空间
- 最全的Android源码目录结构详解
- 黑马程序员—我在学习飞行棋的时候发现的一些问题
- Java的内存结构(Memory Structure)和垃圾收集(Garbage Collection)图解
- yiic(shell model crud) 工具
- 常用SQL语句实例(含过滤及删除重复数据、导入导出数据等)
- Win32 获取磁盘剩余空间+遍历文件目录+wchar_t与char互转
- android 事件处理图
- Cocos2d-x win7 + vs2010 配置图文详解 .
- OCP就业形势起争论,争论最后达成共识?
- Win8 建行网银解决方案
- Activity和Service的生命周期(图)
- c#管理服务停止启动
- win7中IIS安装
- 客户程序与组件之间的协商调用