创建MFC自用工具类kit[2019/10/24]

本文介绍了一个自用MFC工具类,包含了路径处理、编码判断及GBK、UTF8、UNICODE互转的接口,以及INI文件读写功能。提供了头文件声明和函数实现的详细说明。
摘要由CSDN通过智能技术生成

前言

近期在尝试开发MFC,由于有些功能用到的频率比较高,但又比较零散,因此将这些小功能整合到自己创建的工具类kit,由于之前MFC用的不多,因此水平有限,还请看到的大佬不要吐槽,多多指教。

文件结构说明

kit工具类,由头文件kit.h和实现文件kit.cpp组成,kit仅有static函数,不支持实例化。

头文件声明

先放出头文件kit.h的声明源码:

#pragma once

class kit
{
   
public:
	kit(void);
	~kit(void);

	//文件路径字符串判断
	static CString GetRunDir(void);//获取运行目录路径
	//解析文件路径,输出文件名Name [+ 目录Dir + 扩展名Ext + 盘符Disk + 无后缀文件名NameNoExt]
	static int ParsePath(const CString& Path, CString& Name, CString& Dir=(CString)_T(""), CString& Ext=(CString)_T(""), CString& Disk=(CString)_T(""), CString& NameNoExt=(CString)_T(""));
	static BOOL ValidPath(const CString &path);//判断路径字符串是否合法
	static BOOL ValidFileName(const CString &name);//判断文件名字符串是否合法
	static BOOL ValidDir(const CString &dir);//判断目录字符串是否合法

	//文件处理
	enum FileType {
   TYPE_NOTEXIST, TYPE_FILE, TYPE_FOLDER};//路径属性:0不存在此路径; 1此路径为文件; 2此路径为目录
	static FileType CheckPath(const CString& path);//判断路径属性
	//文件编码
	enum FileEncode {
    UNKNOWN_ENCODE, GBK, UNICODE_LE, UNICODE_BE, UTF8, UTF8_NOBOM };
	static UINT GetUtf8Len(const PBYTE utf8, UINT len = 0U);/* 获取一段UTF8文本的字节数 */
	static BOOL IsUnicodeWithoutBOM(const PBYTE pText, UINT length = 0U);/* 判断一段BYTE数组是否为无BOM的UTF8格式 */
	static FileEncode DetectEncode(const PBYTE pBuffer, UINT length = 0U);/* 判断一段文本BYTE数组的编码 */
	static FileEncode GetFileEncode(LPCTSTR FilePath);/* 获取文本文件编码 */
	static BOOL SetFileEncode(LPCTSTR FilePath, FileEncode Encode);/* 设置文本文件编码 */
	static BOOL IsGbk(const PBYTE str, UINT len = 2U);/* 判断一段字符串是否符合GBK特征 */

	//GBK、UTF8转UNICODE
	static CString Utf8ToUnicode(const char* Utf8, int Utf8Len = -1);/* UTF-8到Unicode的转换 */
	static CString GbkToUnicode(const char* Gbk, int GbkLen = -1);/* GBK到Unicode的转换 */

	//UNICODE转GBK、UTF8
	static char* UnicodeToGbk(UINT* GbkLen, const wchar_t* Unicode, int UnicodeLen = -1);/* Unicode转Gbk,用完记得free掉返回的指针 */
	static char* UnicodeToGbk(CString Unicode, UINT* GbkLen = NULL);/* Unicode转Gbk,用完记得free掉返回的指针 */
	static char* UnicodeToUtf8(UINT* Utf8Len, const wchar_t* Unicode, int UnicodeLen = -1);/* Unicode转Utf8,用完记得free掉返回的指针 */
	static char* UnicodeToUtf8(CString Unicode, UINT* Utf8Len = NULL);/* Unicode转Utf8,用完记得free掉返回的指针 */

	//GBK、UTF8互转
	static char* Utf8ToGbk(UINT* GbkLen, const char* Utf8, int Utf8Len = -1);/* Utf8转Gbk,用完记得free掉返回的指针 */
	static char* GbkToUtf8(UINT* Utf8Len, const char* Gbk, int GbkLen = -1);/* Gbk转Utf8,用完记得free掉返回的指针 */

	static const UINT MAX_FILE_LENGTH = 4 * 1024 * 1024;//文件最长文本长度4MB
	static const char* const UTF8_BOM_HEADER;

	//INI文件操作
	static BOOL IniDelete(const CString &Filename, const CString &Section, const CString &Key = _T(""));
	static BOOL IniRead(const CString &Filename, const CString &Section, const CString &Key, CString &value);
	static BOOL IniWrite(const CString &Filename, const CString &Section, const CString &Key, const CString &value);
};

函数实现

通用声明

static const TCHAR InvalidCharOfFileName[] = {
   '\\', '/', ':', '*', '?', '\"', '<', '>', '|'};
static const TCHAR InvalidCharOfPath[] = {
   '/', '*', '?', '\"', '<', '>', '|'};
const char* const kit::UTF8_BOM_HEADER = "\xEF\xBB\xBF";

一、路径类接口

1.GetRunDir

使用GetModuleFileName获取当前运行程序路径。

CString kit::GetRunDir(void)
{
   
	CString path;
	GetModuleFileName(NULL, path.GetBufferSetLength(MAX_PATH + 1), MAX_PATH);
	path.ReleaseBuffer();
	int pos = path.ReverseFind('\\');
	return path.Left(pos);
}

2.ParsePath

解析获取路径中的相关内容(如文件名、文件上一级目录路径、文件扩展名、盘符、和无后缀名的文件名)

int kit::ParsePath(const CString& Path, CString& Name, CString& Dir, CString& Ext, CString& Disk, CString& NameNoExt)
{
   
	if(Path == _T(""))//空字符串
		return 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值