静态库封装之ComFile类

ComFile.h

复制代码
/*
@author:EricsT
@data:20241024
@version:V1.0
@history:
	@author @data @version @content
	EricsT 20241024 V1.0 新增ComFile类[common、FILE以及stream部分]
*/

#pragma once

#include <string>
#include <fstream>
using namespace std;

class ComFile
{
public:

	//common
	//=============================================================================================================

	/*
	func:判断文件是否存在
	@strFilePath:文件路径
	@csFilePath:文件路径
	@pchFilePath:文件路径
	ret:存在true,不存在false
	*/
	static bool isFileExists(string strFilePath);//20241024
	static bool isFileExists(CString csFilePath);//20241024
	static bool isFileExists(PCHAR pchFilePath);//20241024



	//FILE
	//=============================================================================================================

	/*
	func:在bin文件的指定地址处读取1个字节
	@fp:文件指针
	@iAddr:指定地址
	ret:读取的数据
	*/
	static BYTE ReadByteFromAddr_Bin(FILE* fp, DWORD iAddr);//20241024

	/*
	func:在bin文件的当前地址处读取1个字节
	@fp:文件指针
	ret:读取的数据
	*/
	static BYTE ReadByte_Bin(FILE* fp);//20241024

	/*
	func:在bin文件的指定地址处读取2个字节
	@fp:文件指针
	@iAddr:指定地址
	ret:读取的数据
	*/
	static WORD ReadWordFromAddr_Bin(FILE* fp, DWORD iAddr);//20241024

	/*
	func:在bin文件的当前地址处读取2个字节
	@fp:文件指针
	ret:读取的数据
	*/
	static WORD ReadWord_Bin(FILE* fp);//20241024

	/*
	func:在bin文件的指定地址处读取4个字节
	@fp:文件指针
	@iAddr:指定地址
	ret:读取的数据
	*/
	static DWORD ReadDWordFromAddr_Bin(FILE* fp, DWORD iAddr);//20241024

	/*
	func:在bin文件的当前地址处读取4个字节
	@fp:文件指针
	ret:读取的数据
	*/
	static DWORD ReadDWord_Bin(FILE* fp);//20241024

	/*
	func:在bin文件的指定地址处读取指定字节
	@fp:文件指针
	@iAddr:指定地址
	@num:指定字节
	*/
	static void ReadUselessByteFromAddr_Bin(FILE* fp, DWORD iAddr, DWORD num);//20241024

	/*
	func:在bin文件的当前地址处读取指定字节
	@fp:文件指针
	@num:指定字节
	*/
	static void ReadUselessByte_Bin(FILE* fp, DWORD num);//20241024



	//stream
	//=============================================================================================================
	
	/*
	func:在stream文件中读取一行
	@ifs:文件流
	ret:读取的内容
	*/
	static string GetLine_Stream(ifstream& ifs);//20241024

};

ComFile.cpp

复制代码
/*
@author:EricsT
@data:20241024
@version:V1.0
*/

#include "stdafx.h"
#include "ComFile.h"
#include <io.h>

bool ComFile::isFileExists(string strFilePath)
{
	if (-1 == _access(strFilePath.c_str(), 0))
		return false;

	return true;
}

bool ComFile::isFileExists(CString csFilePath)
{
	//CStringToString
	int len = csFilePath.GetLength();
	PCHAR pch = new char[len + 1];
	size_t pchSize = wcstombs(pch, csFilePath, len + 1);

	if (pchSize == wstring::npos)
	{
		delete pch;
		return "";
	}

	string strFilePath(pch);

	delete pch;

	if (-1 == _access(strFilePath.c_str(), 0))
		return false;

	return true;
}

bool ComFile::isFileExists(PCHAR pchFilePath)
{
	if (-1 == _access(pchFilePath, 0))
		return false;

	return true;
}

BYTE ComFile::ReadByteFromAddr_Bin(FILE* fp, DWORD iAddr)
{
	if (nullptr == fp)
		return 0;

	BYTE bRet = 0;

	fseek(fp, iAddr, SEEK_SET);
	fread(&bRet, sizeof(BYTE), 1, fp);
	return bRet & 0xFF;
}

BYTE ComFile::ReadByte_Bin(FILE* fp)
{
	if (nullptr == fp)
		return 0;

	BYTE bRet = 0;

	fread(&bRet, sizeof(BYTE), 1, fp);
	return bRet & 0xFF;
}

WORD ComFile::ReadWordFromAddr_Bin(FILE* fp, DWORD iAddr)
{
	if (nullptr == fp)
		return 0;

	WORD wRet = 0;

	fseek(fp, iAddr, SEEK_SET);
	fread(&wRet, sizeof(WORD), 1, fp);
	return wRet & 0xFFFF;
}

WORD ComFile::ReadWord_Bin(FILE * fp)
{
	if (nullptr == fp)
		return 0;

	WORD wRet = 0;

	fread(&wRet, sizeof(WORD), 1, fp);
	return wRet & 0xFFFF;
}

DWORD ComFile::ReadDWordFromAddr_Bin(FILE* fp, DWORD iAddr)
{
	if (nullptr == fp)
		return 0;

	DWORD dwRet = 0;

	fseek(fp, iAddr, SEEK_SET);
	fread(&dwRet, sizeof(DWORD), 1, fp);
	return dwRet & 0xFFFFFFFF;
}

DWORD ComFile::ReadDWord_Bin(FILE* fp)
{
		if (nullptr == fp)
		return 0;

	DWORD dwRet = 0;

	fread(&dwRet, sizeof(DWORD), 1, fp);
	return dwRet & 0xFFFFFFFF;
}

void ComFile::ReadUselessByteFromAddr_Bin(FILE* fp, DWORD iAddr, DWORD num)
{
	if (nullptr == fp)
		return;

	BYTE bRet;

	fseek(fp, iAddr, SEEK_SET);

	for (int i = 0; i < num; i++)
		fread(&bRet, sizeof(BYTE), 1, fp);
}

void ComFile::ReadUselessByte_Bin(FILE* fp, DWORD num)
{
	if (nullptr == fp)
		return;

	BYTE bRet;

	for (int i = 0; i < num; i++)
		fread(&bRet, sizeof(BYTE), 1, fp);
}

std::string ComFile::GetLine_Stream(ifstream& ifs)
{
	if (!ifs.is_open())
		return string();

	string strLine;
	getline(ifs, strLine);
	return strLine;
}

关注灵活就业新业态,关注公账号:贤才宝(贤才宝https://www.51xcbw.com

相关推荐
序属秋秋秋5 小时前
《Linux系统编程之开发工具》【实战:倒计时 + 进度条】
linux·运维·服务器·c语言·c++·ubuntu·系统编程
七夜zippoe5 小时前
Ascend C流与任务管理实战:构建高效的异步计算管道
服务器·网络·算法
Greedy Alg5 小时前
LeetCode 208. 实现 Trie (前缀树)
算法
Kt&Rs5 小时前
11.5 LeetCode 题目汇总与解题思路
数据结构·算法·leetcode
还是码字踏实5 小时前
基础数据结构之数组的前缀和技巧:和为K的子数组(LeetCode 560 中等题)
算法·leetcode·前缀和·哈希字典
IT小哥哥呀7 小时前
Nginx高可用配置实战:负载均衡 + 健康检查 + 动态扩展
运维·nginx·负载均衡·devops·日志分析·openresty·动态扩展
刘某的Cloud7 小时前
ceph osd down排查
linux·运维·ceph·系统·osd
沙威玛_LHE9 小时前
树和二叉树
数据结构·算法
py有趣11 小时前
LeetCode算法学习之两数之和 II - 输入有序数组
学习·算法·leetcode
夏鹏今天学习了吗11 小时前
【LeetCode热题100(62/100)】搜索二维矩阵
算法·leetcode·矩阵