文件中插入数据(指定内容数据上传,下载,,和本地文件同名)

发布于:2024-07-01 ⋅ 阅读:(9) ⋅ 点赞:(0)

文件中要插入数据,还需要保持原来的格式可以覆盖,但是不能忽略插入以后的数据?最近客户有这样的一个需求,本来我们的文件读取是以二进制流的方式读取和写入的,客户变更了方法,我们该如何解决呢?数据文件还需要上传,下载,命名都和原来文件一致.

为了解决这个问题,我们需要解决一下几个问题:

a.目标文件内容的获取,上传服务器.
b.目标文件的下载,比对原文件,覆盖原文件相同部分内容
c.目标文件的插入.
d后续文件的继续写入.

1.文件的读取,写入方式,我们改为TEXT模式,为了方便查收需要的数据段.
文件上传的时候,备份源文件到指定的目录下,只获取客户需要的数据段,客户看不到备份 的隐藏文件.
BOOL ReadLocalRecipeInfor(CString strRecipeName,BYTE* &dataInfor,long& size)
{

CString strpath=;
CString strFile = strpath+_T(".*");//GetAbsolutePathName(PACKAGE)  + strRecipeName+_T(".pkg") ;
CString strbackUpFile=GetAbsolutePathName(BACKUPPACKAGE)  + strRecipeName+_T(".*"");
	try
{
	if(!file.Open(strFile,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite|CFile::typeText/*typeBinary*/,&e))
	{
		return FALSE;
	}
	UINT fileSize=0;

	fileSize=file.GetLength();
	size=fileSize;
	dataInfor =new BYTE[fileSize+1];
	file.Read(dataInfor,fileSize);
		file.Close();
	CopyFile(strFile,strbackUpFile,FALSE);

}
catch(CException* e)
{
	CString strEror=L"error exception...";
	printf((char*)(LPCTSTR)strEror);
}

2.获取目标文件内容,涉及到文件开始,结束.(这个目标文件的位置,新建再多每一个都是一样的位置 )

下载数据的时候,我们后台把对应的源文件数据复制到目标文件夹中,查找到下载数据的起始位,设置位当前位置,写入数据即可.

3.数据上传,下载.

BOOL WriteLocalRecipeInfor(CString strRecipeName,const BYTE* pRecipeDatas,long nsize)
{
if(nsize<=0)
{
return FALSE;
}
try
{
CString strFile = GetAbsolutePathName(PACKAGE) + strRecipeName+_T(“.“) ;
CString stroldFile=GetAbsolutePathName(BACKUPPACKAGE) + strRecipeName+_T(”.
”);
CopyFile(stroldFile,strFile,FALSE);

	CStdioFile file;
	CFileException e;

	CFileFind fileFind;
	fileFind.FindFile();
if(!file.Open(strFile,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite|CFile::typeText/*typeBinary*/,&e))
	{
		return FALSE;
	}
	UINT fileSize=0;
	long len;
	int stpos;
		BYTE* dataFile;
	BYTE*	needData;
	dataFile=new BYTE[1000];
	file.Read(dataFile,1000);
	TransForByteString(1000,dataFile,needData,len,stpos,sepos);
		file.Seek(stpos,SEEK_CUR);


	file.Write(pRecipeDatas,nsize);
	//file.WriteString(dataInfor);
	file.Close();
		if(needData!=NULL)
	{
		delete [] needData;
		needData =NULL;
	}
	if(dataFile!=NULL)
	{
		delete [] dataFile ;
		dataFile =NULL;
	}
	}
catch(CException* e)
{
		CString strEror=L"error exception...";
	printf((char*)(LPCTSTR)strEror);
}

4.下载的数据插入到文件中.
file.Seek(stpos,SEEK_CUR);数据插入的位置,这样我们就可以保持原来文件不变,只替换新写入的内容.