在项目中需要用到时间信息构建时空拓扑关系,文件也需要通过网络传输,因此想法是把时间信息嵌入到文件中再进行传输。
以下是初步写的一个类(真的不一定用得到),反正就是有c,有c++,水平有限,也供自己参考。
CMyFileTime.h:
#include <atlstr.h>
#include <time.h>
#include<iostream>
using namespace std;
#define TIMESIZE 10
class CMyFileTime
{
public:
CMyFileTime(char* s1,char* s2);
~CMyFileTime();
char *m_oldFilename;
char *m_newFilename;
time_t m_nowTime;
int getFileSize(char* fileName);
void embedTime();
int extractTime();//返回值以秒数表示
private:
};
#include "CMyFileTime.h"
CMyFileTime::CMyFileTime(char* s1,char* s2)
{
m_oldFilename = s1;
m_newFilename = s2;
m_nowTime = 0;
}
CMyFileTime::~CMyFileTime()
{
}
/*
函数名:getFileSize(char * strFileName)
功能:获取指定文件的大小
参数:
strFileName (char *):文件名
返回值:
size (int):文件大小
*/
int CMyFileTime::getFileSize(char* fileName)
{
FILE * fp = fopen(fileName, "r");
fseek(fp, 0L, SEEK_END);
int size = ftell(fp);
fclose(fp);
return size;
}
void CMyFileTime::embedTime()
{
//将当前时间嵌入到图片中
m_nowTime = time(NULL);
char timebuffer[TIMESIZE+1]="";
sprintf(timebuffer,"%d",m_nowTime);
//读取源文件缓存
FILE *fp1 = fopen(m_oldFilename,"rb+");
int sizeF1 = getFileSize(m_oldFilename);
char *bufferF1 = (char*)malloc(sizeF1*sizeof(char));
memset(bufferF1,0,sizeof(char)*sizeF1);
fread(bufferF1,1,sizeF1,fp1);
//把时间和源文件的内容都赋给目的文件
char *bufferF2 = (char*)malloc((sizeF1+TIMESIZE)*sizeof(char));
memset(bufferF2,0,(sizeF1+TIMESIZE)*sizeof(char));
memcpy(bufferF2,timebuffer,TIMESIZE*sizeof(char));
memcpy(bufferF2+TIMESIZE,bufferF1,sizeF1*sizeof(char));
//将缓冲区写入文件
FILE *fp2 = fopen(m_newFilename,"wb+");
fwrite(bufferF2,sizeof(char),TIMESIZE+sizeF1,fp2);
free(bufferF1);
free(bufferF2);
fclose(fp1);
fclose(fp2);
}
int CMyFileTime::extractTime()
{
//1.将源文件数据读出来
FILE *fp1 = fopen(m_oldFilename,"rb+");
int sizeF1 = getFileSize(m_oldFilename);
char *bufferF1 = (char*)malloc(sizeF1*sizeof(char));
memset(bufferF1,0,sizeof(char)*sizeF1);
fread(bufferF1,1,sizeF1,fp1);
//2.前10个字符写到时间缓冲区
char timebuffer[TIMESIZE+1] ="";
memcpy(timebuffer,bufferF1,TIMESIZE*sizeof(char));
//3.后面所有信息写到新的文件f2中
FILE *fp2 = fopen(m_newFilename,"wb+");
char *bufferF2 = (char*)malloc((sizeF1-TIMESIZE)*sizeof(char));
fseek(fp1,TIMESIZE,0);
fread(bufferF2,1,sizeF1-TIMESIZE,fp1);
fwrite(bufferF2,sizeof(char),sizeF1-TIMESIZE,fp2);
free(bufferF1);
free(bufferF2);
fclose(fp1);
fclose(fp2);
int time = atoi(timebuffer);
return time;
}
#include "CMyFileTime.h"
int main()
{
CMyFileTime ss("f1.dat","f2.dat");
//嵌入时间
ss.embedTime();
printf("embedTime is successful\n");
提取时间
//int time = ss.extractTime();
//printf("%d\n",time);
return 0;
}
吃完火锅回实验室写完的,要回去睡觉了...