⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tools.h

📁 在Linux下使用GCC编制的FTP服务器
💻 H
字号:
/***********************************************************************************
* 文 件 名: Tools.h
* 摘    要: 工具类名字空间,封装一些常用的函数
* 编    写: gotter@163.com
* 日    期: 2005-09-10
* 修    改: 
* Copyright (c) 2004 
*************************************************************************************/
#if !defined(AFX_Tools_H__C74B5F0D_E1BC_4446_BCC7_2CFA6BF92EFC__INCLUDED_)
#define AFX_Tools_H__C74B5F0D_E1BC_4446_BCC7_2CFA6BF92EFC__INCLUDED_

#include "Public.h"

namespace Tools
{
	/*********************************************************************************
	*功能: 去掉字符串pszBuf前后chTag(缺省为' ')字符
	*输入: pszBuf--源字符串缓冲区
	*输出: pszBuf--目标缓冲区
	*返回: pszBuf
	*********************************************************************************/
	char *Trim(char *pszBuf,char chTag=' ');

	/*********************************************************************************
	*功能: 将源字符串pszSrc拷贝到目标缓冲区pszDst,并去掉目标字符串的前后chTag
	*输入: pszBuf--源字符串缓冲区
	*输出: pszDst--目标缓冲区
	*返回: pszDst
	*********************************************************************************/
	char *TrimCopy(char *pszDst,const char *pszSrc,char chTag=' ');

	/*********************************************************************************
	*功能: 拷贝包含在startTag和endTag之间的不包含前后空格的子串
	*输入: szDst--目标缓冲区,iDstSize--目标缓冲区大小,szSrc--源字符串
	*      szStartTag--要查找的开始字符串标记
	*      szEndTag--要查找的结束字符串标记
	*输出: szDst--目标缓冲区
	*返回: 如果失败,返回NULL,否则返回pszDst
	*********************************************************************************/
    char *StrCopyByTag(char *pszDst,
					   int iDstSize,
				       const char *pszSrc,
				       const char *pszStartTag,
				       const char *pszEndTag);

	/*********************************************************************************
	*功能: 一次创建多级目录
	*输入: pszDir-- 目录字符串
	*	   iMode -- 目录访问权限
	*输出: 无
	*返回: true--成功 false--失败
	*********************************************************************************/
    bool CreateDirs(const char *pszDir,int iMode);

	/*********************************************************************************
	*功能: 判断sSub是否是pSrc的开始串,不区分大小写
	*输入: pSrc--源缓冲区,szSub--用于比较的字符串
	*输出: 无
	*返回: true--成功 false--失败
	*********************************************************************************/
    bool IStartWith(const void *pSrc,const char *szSub);

	/*********************************************************************************
	*功能: 将相对路径的URL转为绝对路径的URL
	*输入: szDstUrl--目标缓冲区,
	*	   iDstSize--目标缓冲区大小
	*	   szSrcUrl--源绝对路径URL,类似于"/","/home/gotter"
	*	   szSrcUrl应该以'/'开头,结尾不要有'/',除非表示根目录
	*	   szRelUrl--用于转换的相对路径URL,可以有如下类型:
	*	   "/","/home/gotter","home","home/gotter","../../gotter"
	*输出: szDstUrl--目标缓冲区
	*返回: 目标缓冲区,==NULL表示失败
	*********************************************************************************/
    char *UrlRelToAbs(char *pszDstUrl,
					  int iDstSize,
					  const char *pszSrcUrl,
					  const char *pszRelUrl);

	/*********************************************************************************
	*功能: 将szSrc中包含的所有szSubOld字符串转换成szSubNew,
	*输入: szSrc--需要转换的源字符串
	*		szSubOld--将被替换的旧字符串
	*		szSubNew--将替换成的新字符串
	*输出: 无
	*返回: 如果szSrc中发现szSubOld,返回被替换后的新字符串,新字符串是
	*		在堆分配,使用完后务必delete []!,如果没发现,返回NULL.
	*********************************************************************************/
	char *ReplaceAll(const char *szSrc,
					 const char *szSubOld,
					 const char *szSubNew);

	/*********************************************************************************
	*功能: 将URL串中的不安全字符编码,现只处理空格情况,假如转换后的URL
	*		长度超过nSrcSize-1,则只保留nSrcSize-1长的URL
	*输入: szUrl--需要编码的URL
	*		nUrlSize--szUrl缓冲区大小
	*输出: 无
	*返回: szUrl
	*********************************************************************************/
	char *UrlEncode(char *szUrl,unsigned nUrlSize);

	/*********************************************************************************
	*功能: 将数据进行BASE64编码
	*输入: pSrc--源缓冲区,nSrcLen--源缓冲区长度
	*		nMaxLineLen--编码后每行的最大长度
	*输出: pDst--编码后的目标字符串
	*返回: 目标字符串长度
	*********************************************************************************/
	int Base64Encode(char* pDst,
					 const unsigned char* pSrc, 
					 int nSrcLen,
					 int nMaxLineLen);

	/*********************************************************************************
	*功能: 将BASE64编码数据进行解码
	*输入: pSrc--源缓冲区,nSrcLen--源缓冲区长度
	*输出: pDst--解码后的目标缓冲区
	*返回: 目标缓冲区长度
	*********************************************************************************/
	int Base64Decode(unsigned char* pDst,
					 const char* pSrc, 
					 int nSrcLen);

	/*********************************************************************************
	*功能: 判断文件是否存在
	*输入: pszFile--文件名
	*输出: 无
	*返回: 真--存在  假--不存在
	*********************************************************************************/
	bool IsFile(const char *pszFile);

	/*********************************************************************************
	*功能: 判断目录是否存在
	*输入: pszDir --目录名
	*输出: 无
	*返回: 真--存在  假--不存在
	*********************************************************************************/
	bool IsDir(const char *pszDir);

	/*********************************************************************************
	*功能: 获取文件大小
	*输入: pszFile --文件名
	*输出: 无
	*返回: 成功则返回大于或等于0的值,失败返回负值
	*********************************************************************************/
	int GetFileSize(const char *pszFile);

	/*********************************************************************************
	*功能: 将一个字节转换成十六进制字符串
	*输入: cSrc	--要转换的字节 
	*输出: pszHex	--转换后的字符串,两个字符,一个结束符
	*返回: 无
	*********************************************************************************/
	void Char2HexStr(char *pszHex,char cSrc);

	/*********************************************************************************
	*功能: 往当前目录的log.txt文件中写入一行日志,如果文件不存在
	*		则首先创建文件
	*输入: pszFormat--格式化的字符串,末尾不需要加入换行符
	*		其它后续 --与pszFormat匹配的参数
	*输出: 无
	*返回: 真--成功  假--失败
	*********************************************************************************/
	bool Log(const char *pszFormat,...);

	/*********************************************************************************
	*功能: 功能同Log,只是日志文件由第一个参数pszFile指定
	*输入:pszFile	 --要写入的日志文件名
	*		pszFormat--格式化的字符串,末尾不需要加入换行符
	*		其它后续 --与pszFormat匹配的参数
	*输出: 无
	*返回: 真--成功  假--失败
	 *********************************************************************************/
	bool LogFile(const char *pszFile,const char *pszFormat,...);

	/*********************************************************************************
	 *功能: 将pAddr指向的内存以十六进制的方式记录在日志文件Log.txt中
	 *输入:pAddr	--要读取的内存的首地址
	 *		iSize	--要读取的内存大小,字节表示
	 *		pszInfo	--其他附加信息
	 *输出: 无
	 *返回: 真--成功  假--失败
	 *********************************************************************************/
	bool LogMem(void *pAddr,int iSize,const char *pszInfo="");
	
	/*********************************************************************************
	 *功能: 从文件流pStream中读取一行字符串,支持每行字符个数小于1024的配置文件
	 *输入:pszBuf	--接收缓冲区
	 *		iSize	--缓冲区的大小,如果文件流中的某一行长度大于iSize-1,
	 *				  则该行剩下的字符将被此次ReadLine读取并扔弃掉。
	 *		pStream	--文件流,必须有可读的属性
	 *		bKeepLineSymbol	--是否保留行尾的换行符号(回车符号无条件扔弃掉)
	 *输出: 无
	 *返回: 大于0表示实际读取的字符个数,==0表示文件结束,小于0出错
	 *********************************************************************************/
	int ReadLine(char *pszBuf,int iSize,FILE *pStream,bool bKeepLineSymbol=false);

	char *ReadConfig(const char *pszName,const char *pszValDef,
					 char *pszVal,int iSize,const char *pszFile);
	bool WriteConfig(const char *pszName,const char *pszVal,const char *pszFile);
	//调试用函数
	void MemDump(const void *pVoid, int iSize,const char *pszInfo=NULL);
	//调试用函数
	void MemDump(const string &sVal,const char *pszInfo=NULL);
	bool IsEmpty(const char *pszVal);
};
using namespace Tools;
#endif //!defined(AFX_Tools_H__C74B5F0D_E1BC_4446_BCC7_2CFA6BF92EFC__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -