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 + -
显示快捷键?