C++ 文件操作

来源:互联网 发布:c语言界面设计 编辑:程序博客网 时间:2024/05/18 02:29
FILE *fp;fp = fopen("文件名","打开方式-- w/r/rb/wb..");格式:fputc( 字节变量,文件类型指针 );格式:字节变量=fgetc( 文件类型指针 );格式:fputs/fgets( 字符串地址,字符串长度,文件类型指针 );格式:fread/fwrite( 数据地址, 数据长度,数据项,文件类型指针 );

操作:
1. char ch = fgetc(fp); //从文件中读取1个字节给ch
2. fputc(ch, fp); //将ch(单字节)值写入文件
3. fgets(str,5,fp); //从文件中读取字符串(5个字符)给str
||
fread( str, 5, 1, fp );

4.fputs( str, 5, fp ); //将str字符串(5个字符)写入文件
||
fwrite( str, 5, 1, fp );

5.fread( var, sizeof(var[0]), 5, fp ); //从文件中读取5个指定字节长度数据给指定类型变量数组var
fwrite( var, sizeof(var[0]), 5, fp ); //将指定类型变量数组var的前5个元素写入文件

fclose(*fp);

例子:
// 读取txt文件,文件内容:首行为年份,年份对应的列值为大小在1-50
//以内的数字,行数为200以内,列数为50以内。要求统计每个年份中每
//个值出现的次数

int main(){ifstream fs("aaa.txt");  if (!fs.is_open())  {      cout << "Error in open file!" << endl;      return -1;  }  int iyear[50];int inum[200][100]={0};int inum1[100][200]={0};string sbuff[201];int i=0;//while读取文件内容并保存到sbuff中while (!fs.eof())    {    getline(fs, sbuff[i],'\n');    i++;}fs.clear();fs.close();for(int j=0;j<i;j++){      if (j == 0) //读取第一行年份并保存    {          string str = sbuff[j];        for (int i=0;i<100;i++)        {            int pos =  str.find("\t");            string snum = str.substr(0,pos);            int num = atoi(snum.data());            iyear[i] = num;            str.erase(0,pos+1);                     }    }      else  //从第二行开始读取数字    {          string str1 = sbuff[j];        for (int i=0;i<100;i++)        {            int pos =  str1.find("\t");            string snum = str1.substr(0,pos);            int num = atoi(snum.data());            inum[j-1][i] =num;  //用二维数组存j行的所有数字             str1.erase(0,pos+1);                        }    }  }  //iyear[]存的是年份,inum[]存的是从第二行开始的所有行的数字//  for (int i=1;i<200;i++)//  {//      for (int j=0;j<44;j++)//      {//          printf("%d ", inum[i][j]);//      }//  }//  int staticnum[200]={0};//  for (int i=0;i<45;i++)//  {//      int temp = inum[0][i];//      staticnum[temp-1] +=1;//      printf("%d \n",inum[0][i]);  //第一行//  }int staticnum[45]={0};for (int i=0;i<200;i++){    int temp = inum[i][0];    staticnum[temp-1] +=1;    //printf("%d \n",inum[i][0]);  //第一列}for (int i=0;i<45;i++){    printf("1976年中的%d 出现的次数为%d \n",i+1,staticnum[i]);}system( "PAUSE ");return 0;}
0 0