在写这个代码前,需要在执行目录中添加三个文件read1.txt,read2.txt,read3.txt ----------------------------------------------------------------- #include <iostream> using namespace std;
//假设有三个buffer存放数据 char m_info1[256]; char m_info2[256]; char m_info3[256];
//使用getc()的方式获取文本数据 void GetcRead(char * fName) { FILE *m_fp; memset(m_info1,0,sizeof(m_info1)); m_fp = fopen(fName,"r"); char *p = m_info1; if(m_fp!=NULL) { char c; while((c=fgetc(m_fp))!=EOF) { *p=c; p++; } }
fclose(m_fp); }
//使用fread()的方式获取文本数据 void freadRead(char * fName) { FILE *m_fp; memset(m_info2,0,sizeof(m_info2)); m_fp = fopen(fName,"r"); char *p = m_info2; if(m_fp!=NULL) { char c; while(!feof(m_fp)) { fread((p++),1,1,m_fp); } } fclose(m_fp); }
//使用fscanf()的方式获取文本数据 void fscanfRead(char * fName) { FILE *m_fp; memset(m_info3,0,sizeof(m_info3)); m_fp = fopen(fName,"r"); char *p = m_info3; if(m_fp!=NULL) { char c; while(fscanf(m_fp,"%c",p++)!=EOF) { } } fclose(m_fp); }
void Write(char * fName) { FILE *fp = fopen(fName,"a"); fputs("[txt1]\n",fp); \\[txt]是分割文件标志~ fputs(m_info1,fp); fputs("\n[txt2]\n",fp); fputs(m_info2,fp); fputs("\n[txt3]\n",fp); fputs(m_info3,fp); fputs("\n",fp); fclose(fp); }
void Split(char * fName) { FILE *m_fp; char temp[3][256]; //清空临时数组空间 memset(temp[0],0,sizeof(m_info3)); memset(temp[1],0,sizeof(m_info3)); memset(temp[2],0,sizeof(m_info3));
m_fp = fopen(fName,"r"); int count =0; //记录有多少个"[]"个数进行分包 if(m_fp!=NULL) { memset(m_info3,0,sizeof(m_info3)); char *p; char c; while((c=fgetc(m_fp))!=EOF) { if(c=='[') //检测是否遇到分割标志 { fseek(m_fp,7,SEEK_CUR);//遇到分割标志则跳过分割数据开始记录 p = temp[count++]; } else { *p=c; //记录数据 p++; } } }
//根据刚才的读取的个数分包 for(int i=0;i<count;i++) { char str[64]; //临时文字buffer sprintf(str,"Split%d.txt",i); //根据数量更改配置文件名 FILE *fp = fopen(str,"w"); //打开文件写权限 fputs(temp,fp); //写入数据 fclose(fp); //关闭 }
fclose(m_fp); }
int main() { GetcRead("read1.txt"); //用getc()方式去读文本 freadRead("read2.txt"); //用fread()方式读取文本 fscanfRead("read3.txt"); //用fscan()方式去读文本 Write("write.txt"); Split("write.txt"); }
|