【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 2211|回复: 0

文件读写函数应用getc(),fscanf()写的一个打包程序~

[复制链接]
发表于 2009-9-26 15:34:39 | 显示全部楼层 |阅读模式

在写这个代码前,需要在执行目录中添加三个文件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");
}

 

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-6-25 04:40

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表