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;
}