globefun.cpp
来自「深入浅出Visual C++入门进阶与应用实例 随书光盘 作者 何志丹」· C++ 代码 · 共 149 行
CPP
149 行
#include "stdafx.h"
#include <direct.h>
extern "C" int WINAPI HDRand(int nMax)
{
if(0 == nMax)//最大值为0
{
ASSERT(false);//用法过于古怪
return 0;
}
if(nMax < 0)//nMax不能为负,如果为负改成其绝对值
nMax = - nMax;
CTime t = CTime::GetCurrentTime();
int n = t.GetMinute() * 60 + t.GetSecond();
while(n-- > 0)
{
rand();
}
int result = rand()%(nMax + 1 );
return result;
};
extern "C" void DeleteDirFile(CString sPath)
{
WIN32_FIND_DATA fd;
HANDLE hFind = ::FindFirstFile(sPath + "*.*",&fd);
if (hFind != INVALID_HANDLE_VALUE)
{
while (::FindNextFile(hFind,&fd))
{
//判断是否为目录
if (fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
CString name;
name = fd.cFileName;
//判断是否为.和..
if ((name != ".") && (name != ".."))
{
//如果是真正的目录,进行递归
DeleteDirFile(sPath + fd.cFileName + "\\");
}
}
else
DeleteFile(sPath + fd.cFileName);
}
::FindClose(hFind);
}
RemoveDirectory(sPath);
}
extern "C" int IsDirectoryOrFile(CString strFileName)
{
if(strFileName.Right(1) == "\\")
strFileName = strFileName.Left(strFileName.GetLength() - 1);
strFileName.TrimLeft();
strFileName.TrimRight();
CFileFind fileFind;
if(0 == fileFind.FindFile(strFileName))
return 0 ;
fileFind.FindNextFile();
if(fileFind.IsDirectory())
{
fileFind.Close();
return 2 ;
}
fileFind.Close();
return 1;
}
extern "C" CString OleVarToString(COleVariant var)
{
CString str;
switch(var.vt)
{
case VT_BSTR://字符串
str=(LPCSTR)var.bstrVal;
break;
case VT_I2://int型
str.Format("%d",(int)var.iVal);
break;
case VT_I4://long型
str.Format("%d",var.lVal);
break;
case VT_R4://float型
{
str.Format("%f",(double)var.fltVal);
break;
}
case VT_R8://double型
{
str.Format("%f",var.dblVal);
break;
}
case VT_CY:
str=COleCurrency(var).Format();
break;
case VT_DATE://日期型
str=COleDateTime(var).Format();
break;
case VT_BOOL://布尔型
str=(var.boolVal==0)?"FALSE":"TRUE";
break;
case VT_NULL://空
str="----";
break;
default:
str.Format("Unk type %d\n",var.vt);
TRACE("Unknown type%d\n",var.vt);
}
return str;
}
extern "C" CString GetExePath()
{
CString strPathName;
GetModuleFileName(NULL,strPathName.GetBuffer(256),256);
strPathName.ReleaseBuffer(256);
int nPos = strPathName.ReverseFind('\\');
strPathName = strPathName.Left(nPos + 1);
return strPathName;
}
extern "C" CString HDGetTempFileName(CString strPathName,CString strPrefixString,UINT &nSuffixBegin,UINT nSuffixAdd
,CString strExt,bool bUnique)
{
CString strFileName ;
for(int i =0 ; i < 1000 ; i++) //避免死循环
{
strFileName.Format("%s%d%s",strPrefixString,nSuffixBegin,strExt);
if(!bUnique)//不要求唯一
return strFileName;
if(0 == IsDirectoryOrFile(strPathName + strFileName))//不存在同名的文件或文件夹
return strFileName;
nSuffixBegin += nSuffixAdd;
}
return "";
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?