// OperatorFile.cpp: implementation of the COperatorFile class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "OperatorFile.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
COperatorFile::COperatorFile()
{
}
COperatorFile::~COperatorFile()
{
}
long COperatorFile::DataSize(LPCTSTR pctszFilePath, long &lDataSize, long lOperatorType)
{
const TCHAR tszModuleName[] = _T("DataSize");
long lRet = 0;
switch (lOperatorType)
{
case 1:
{
FILE *pFILE;
int iRet;
pFILE = _tfopen(pctszFilePath, _T("rb+"));
if (pFILE == NULL)
{
lDataSize = 0;
m_OperatorLog.GenerateErrorInfo(tszModuleName, _T("_tfopen()返回值为NULL"));
return -1;
}
iRet = fseek(pFILE, 0, 2);
if (iRet != 0)
{
lDataSize = 0;
lRet = -1;
m_OperatorLog.GenerateErrorInfo(tszModuleName, _T("fseek()返回值不为0"));
}
if (lRet == 0)
{
lDataSize = ftell(pFILE);
if (lDataSize == -1)
{
lDataSize = 0;
lRet = -1;
m_OperatorLog.GenerateErrorInfo(tszModuleName, _T("ftell()返回值为-1"));
}
}
iRet = fclose(pFILE);
pFILE = NULL;
if (iRet != 0)
{
if (lRet >= 0)
{
lRet = 1;
m_OperatorLog.GenerateErrorInfo(tszModuleName, _T("fclose()返回值不为0"));
}
}
}
break;
case 2:
{
char szFilePath[1024] = {0};
ifstream isData;
m_OperatorData.DataConvert((const UCHAR *)pctszFilePath, (UCHAR *)szFilePath, DATA_FORMAT_T, DATA_FORMAT_ANSI, -1);
isData.open(szFilePath, ios::in | ios::binary);
if (!isData)
{
lDataSize = 0;
m_OperatorLog.GenerateErrorInfo(tszModuleName, _T("open()结果值不为NULL"));
return -1;
}
isData.seekg(0, (ios_base::seekdir)2);
lDataSize = (long)isData.tellg();
isData.close();
}
break;
case 3:
{
CStdioFile sfData;
BOOL bRet;
bRet = sfData.Open(pctszFilePath, CFile::modeRead | CFile::typeBinary | CFile::shareDenyNone);
if (!bRet)
{
lDataSize = 0;
m_OperatorLog.GenerateErrorInfo(tszModuleName, _T("Open()返回值为FALSE"));
return -1;
}
sfData.Seek(0, (enum CStdioFile::SeekPosition)2);
lDataSize = (long)sfData.GetLength();
sfData.Close();
}
break;
case 4:
{
HANDLE hFile;
DWORD dwRet;
BOOL bRet;
hFile = CreateFile(pctszFilePath, GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if (hFile == INVALID_HANDLE_VALUE)
{
lDataSize = 0;
hFile = NULL;
m_OperatorLog.GenerateErrorInfo(tszModuleName, _T("CreateFile()返回值为INVALID_HANDLE_VALUE"));
return -1;
}
dwRet = SetFilePointer(hFile, 0, NULL, 2);
if (dwRet == 0xFFFFFFFF)
{
lDataSize = 0;
lRet = -1;
m_OperatorLog.GenerateErrorInfo(tszModuleName, _T("SetFilePointer()返回值为0xFFFFFFFF"));
}
if (lRet == 0)
{
lDataSize = GetFileSize(hFile, NULL);
if (lDataSize == 0xFFFFFFFF)
{
lDataSize = 0;
lRet = -1;
m_OperatorLog.GenerateErrorInfo(tszModuleName, _T("GetFileSize()结果值为0xFFFFFFFF"));
}
}
bRet = CloseHandle(hFile);
if (!bRet)
{
if (lRet >= 0)
{
lRet = 1;
m_OperatorLog.GenerateErrorInfo(tszModuleName, _T("CloseHandle()返回值为FALSE"));
}
}
}
break;
default:
lRet = -1;
break;
}
return lRet;
}
long COperatorFile::WriteByte(LPCTSTR pctszFilePath, UCHAR *pucData, long lDataSize, long lOperatorType, BOOL bAppend, long lOffsetType, long lOffset)
{
const TCHAR tszModuleName[] = _T("WriteByte");
long lRet = 0;
switch (lOperatorType)
{
case 1:
{
FILE *pFILE;
int iRet;
long lCount;
long lDataSizeTemp;
if (!bAppend)
{
pFILE = _tfopen(pctszFilePath, _T("wb+"));
}
else
{
pFILE = _tfopen(pctszFilePath, _T("rb+"));
}
if (pFILE == NULL)
{
m_OperatorLog.GenerateErrorInfo(tszModuleName, _T("_tfopen()返回值为NULL"));
return -1;
}
iRet = fseek(pFILE, lOffset, lOffsetType);
if (iRet != 0)
{
lRet = -1;
m_OperatorLog.GenerateErrorInfo(tszModuleName, _T("fseek()返回值不为0"));
}
if (lRet == 0)
{
for (lCount = 0; (DATA_SINGLE_SIZE * lCount) < lDataSize; lCount++)
{
lDataSizeTemp = ((DATA_SINGLE_SIZE * (lCount + 1)) < lDataSize) ? DATA_SINGLE_SIZE : (lDataSize - DATA_SINGLE_SIZE * lCount);
iRet = fwrite(pucData + DATA_SINGLE_SIZE * lCount, 1, lDataSizeTemp, pFILE);
if (iRet != lDataSizeTemp)
{
lRet = -1;
m_OperatorLog.GenerateErrorInfo(tszModuleName,
_T("fwrite()返回值为%d,不为理论值%d"),
iRet,
lDataSizeTemp);
break;
}
iRet = fflush(pFILE);
if (iRet != 0)
{
lRet = -1;
m_OperatorLog.GenerateErrorInfo(tszModuleName, _T("fflush()返回值不为0"));
break;
}
}
}
iRet = fclose(pFILE);
pFILE = NULL;
if (iRet != 0)
{
if (lRet >= 0)
{
lRet = 1;
m_OperatorLog.GenerateErrorInfo(tszModuleName, _T("fclose()返回值不为0"));
}
}
}
break;
case 2:
{
char szFilePath[1024] = {0};
ofstream osData;
long lCount;
long lDataSizeTemp;
BOOL bRet;
m_OperatorData.DataConvert((const UCHAR *)pctszFilePath, (UCHAR *)szFilePath, DATA_FORMAT_T, DATA_FORMAT_ANSI, -1);
if (!bAppend)
{
osData.open(szFilePath, ios::out | ios::binary);
}
else
{
osData.open(szFilePath, ios::in | ios::binary);
}
if (!osData)
{
m_OperatorLog.GenerateErrorInfo(tszModuleName, _T("open()结果值为NULL"));
return -1;
}
osData.seekp(lOffset, (ios_base::seekdir)lOffsetType);
for (lCount = 0; (DATA_SINGLE_SIZE * lCount) < lDataSize; lCount++)
{
lDataSizeTemp = ((DATA_SINGLE_SIZE * (lCount + 1)) < lDataSize) ? DATA_SINGLE_SIZE : (lDataSize - DATA_SINGLE_SIZE * lCount);
osData.write((const char*)pucData + DATA_SINGLE_SIZE * lCount, lDataSizeTemp);
osData.flush();
bRet = osData.good();
if (!bRet)
{
lRet = -1;
m_OperatorLog.GenerateErrorInfo(tszModuleName, _T("good()返回值为false"));
break;
}
}
osData.close();
}
break;
case 3:
{
CStdioFile sfData;
BOOL bRet;
long lCount;
long lDataSizeTemp;
if (!bAppend)
{
bRet = sfData.Open(pctszFilePath, CFile::modeWrite | CFile::modeCreate | CFile::typeBinary | CFile::shareDenyNone);
}
else
{
bRet = sfData.Open(pctszFilePath, CFile::modeWrite | CFile::modeNoTruncate | CFile::modeCreate | CFile::typeBinary | CFile::shareDenyNone);
}
if (!bRet)
{
m_OperatorLog.GenerateErrorInfo(tszModuleName, _T("Open()返回值为FALSE"));
return -1;
}
sfData.Seek(lOffset, (enum CStdioFile::SeekPosition)lOffsetType);
for (lCount = 0; (DATA_SINGLE_SIZE * lCount) < lDataSize; lCount++)
{
lDataSizeTemp = ((DATA_SINGLE_SIZE * (lCount + 1)) < lDataSize) ? DATA_SINGLE_SIZE : (lDataSize - DATA_SINGLE_SIZE * lCount);
sfData.Write(pucData + DATA_SINGLE_SIZE * lCount, lDataSizeTemp);
sfData.Flush();
}
sfData.Close();
}
break;
case 4:
{
HANDLE hFile;
DWORD dwRet;
DWORD dwNumberOfBytesWritten = 0;
BOOL bRet;
if (!bAppend)
{
hFile = CreateFile(pctszFilePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
}
else
{
hFile = CreateFile(pctszFilePath, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
}
if (hFile == INVALID_HANDLE_VALUE)
{
hFile = NULL;
m_OperatorLog.GenerateErrorInfo(tszModuleName, _T("
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
有以下函数可供使用: 1数据转换:ANSI等编码、UTF8编码、UTF16编码(实际为Unicode编码)、TCHAR互转,可以先获取转换出的数据在存储时所需的大小 2字符串查找:正向查找、逆向查找、指定偏移查找 3字符串切割:正向分割、逆向分割、指定偏移切割 4字符串转十六进制字符串、二进制字符串 5转义字符串 6随机数 源码包含了封装的功能模块类以及测试类, 全部源码都可以用VS2020编译通过,请放心使用! 友情提示,为了兼顾一些旧代码,预编译头文件用的是StdAfx.h,如果需要更换为最新的pch.h,请按照以下步骤操作: 1将StdAfx.h、StdAfx.cpp移出项目,并添加pch.h、pch.cpp 2选中整个项目,项目-属性-C++-预编译头-预编译头文件:pch.h 3选中单个pch.cpp文件,右键菜单,属性-C++-预编译头-预编译头:创建(/Yc) 4确保步骤2、3在所有配置(配置:Release、Debug,平台:Win32、x64,共四种组合)均设置成功 5源码中所有使用StdAfx.h的地方,均改为pch.h
资源推荐
资源详情
资源评论
收起资源包目录
Src01.rar (67个子文件)
Include
OperatorPath.cpp 12KB
OperatorFile.h 4KB
OperatorTime.cpp 2KB
OperatorCommon.cpp 471B
OperatorCommon.h 765B
TestOperatorData.h 874B
OperatorData.h 3KB
OperatorFile
msxml6
msxml6.tli 125KB
msxml6.tlh 145KB
OperatorTime.h 1KB
OperatorPath.h 2KB
TestOperatorData.cpp 11KB
OperatorData.cpp 19KB
OperatorLog.cpp 28KB
OperatorLog.h 6KB
OperatorFile.cpp 36KB
Library
WorkSpace02
Project01
Output
TempU
OperatorFile
Data_UTF16.dat 0B
Data_ANSI.dat 0B
Data_UTF8.dat 0B
Data.ini 110B
Data.xml 360B
Data.dat 10B
TempA
Include
BuildAll.sln 2KB
DemoU
DemoU.vcxproj 13KB
CViewLog02Dlg.h 679B
framework.h 2KB
DemoU.vcxproj.filters 5KB
DemoUDlg.cpp 6KB
DemoU.rc 12KB
res
DemoU.ico 66KB
DemoU.rc2 666B
Resource.h 773B
DemoUDlg.h 996B
pch.h 546B
CViewLog03Dlg.cpp 7KB
StdAfx.cpp 19B
CViewLog03Dlg.h 679B
DemoU.cpp 3KB
pch.cpp 158B
CViewLog02Dlg.cpp 7KB
CViewLog01Dlg.cpp 7KB
StdAfx.h 141B
DemoU.h 472B
targetver.h 295B
CViewLog01Dlg.h 679B
DemoA
DemoA.rc 12KB
DemoADlg.h 996B
DemoADlg.cpp 6KB
CViewLog02Dlg.h 679B
DemoA.cpp 3KB
DemoA.h 472B
framework.h 2KB
DemoA.vcxproj 13KB
res
DemoA.rc2 666B
DemoA.ico 66KB
Resource.h 773B
pch.h 546B
CViewLog03Dlg.cpp 7KB
StdAfx.cpp 19B
CViewLog03Dlg.h 679B
pch.cpp 158B
DemoA.vcxproj.filters 5KB
CViewLog02Dlg.cpp 7KB
CViewLog01Dlg.cpp 7KB
StdAfx.h 141B
targetver.h 295B
CViewLog01Dlg.h 679B
共 67 条
- 1
资源评论
skyksksksksks
- 粉丝: 273
- 资源: 21
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- Docker在Ubuntu16.04上安装和部署Apache Storm
- test_kong.zip
- springboot权限验证学习-下
- SeetaFace6人脸质量评估C++代码实现Demo
- OCAuxiliaryTools
- 制药公司QC顶岗实习专题报告
- Rust 全面指南:从基础到高级,一网打尽 Rust 的编程知识
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功