丧血槌 发表于 2025-6-4 19:56:06

静态库封装之ComFile类

ComFile.h

/*
@author:EricsT
@data:20241024
@version:V1.0
@history:
        @author @data @version @content
        EricsT 20241024 V1.0 新增ComFile类
*/

#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;
        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;
}在VS编译器内会报C4996错误,解决见下文:
C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. - EricsT - 博客园 (cnblogs.com)

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 静态库封装之ComFile类