文件操作

Posted satellite&

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件操作相关的知识,希望对你有一定的参考价值。

从键盘输入10个整数,其中,5个整数存放到磁盘文件first.dat,另外5个整数存放到磁盘文件second.dat。从second.dat读取5个整数,存放到first.dat 文件原有数据的后面。从first.dat 读取10个整数,升序排列后存放到second.dat (覆盖原有数据)。

 

  1 #include <iostream>
  2 #include <cstdlib>
  3 #include <fstream>
  4 using namespace std;
  5 
  6 void bubblesort(int arr[],int n);
  7 int main()
  8 {
  9     fstream f("first.dat",ios::in|ios::out|ios::binary);
 10     if(!f)
 11     {
 12         cerr<<"first open error!"<<endl;
 13         exit(1);
 14     }
 15     fstream s("second.dat",ios::in|ios::out|ios::binary);
 16     if(!f)
 17     {
 18         cerr<<"second open error!"<<endl;
 19         exit(1);
 20     }
 21     //打开文件、关联
 22 
 23     int i;
 24     int z[10];
 25     cout<<"please enter 10 integers:";
 26     for(i=0;i<10;i++)
 27     {
 28         cin>>z[i];
 29     }
 30     cout<<"integers:";
 31     for(i=0;i<10;i++)
 32     {
 33         cout<<"z"<<i<<": "<<z[i]<<"  ";
 34     }
 35     cout<<endl;
 36     //从键盘输入10个整数,并回显
 37 
 38     for(i=0;i<5;i++)
 39     {
 40         f.write((char*)&z[i],sizeof(z[i]));
 41     }
 42     for(i=5;i<10;i++)
 43     {
 44         s.write((char*)&z[i],sizeof(z[i]));
 45     }
 46     //前五个写入first,后五个写入second。
 47 
 48     int z1[5]={0};
 49     s.seekg(0,ios::beg);
 50     cout<<"second:";
 51     for(i=0;i<5;i++)
 52     {
 53         s.read((char *)&z1[i],sizeof(z1[i])); //
 54         cout<<z1[i]<<"  ";
 55     }
 56     cout<<endl;
 57     //读出second中的5 个数至existing program
 58 
 59     for(i=0;i<5;i++)
 60     {
 61         f.write((char *)&z1[i],sizeof(z1[0]));
 62     }
 63     //将这五个数据续写到first尾
 64 
 65     f.seekg(0,ios::beg);
 66     int z2[10]={0};
 67     cout<<"first:";
 68     for(i=0;i<10;i++)
 69     {
 70         f.read((char *)&z2[i],sizeof(z2[0]));
 71         cout<<z2[i]<<"  ";
 72     }
 73     cout<<endl;
 74     //读出first中的10 个整数至EP
 75 
 76     bubblesort(z2,10);
 77     cout<<"after sort:";
 78     for(i=0;i<10;i++)
 79         cout<<z2[i]<<"  ";
 80     cout<<endl;
 81     //排序并显示结果
 82 
 83     s.seekp(0,ios::beg);
 84     for(i=0;i<10;i++)
 85     {
 86         s.write((char *)&z2[i],sizeof(z2[i]));
 87     }
 88     //将排序后的10个数写入second,从头,覆盖原数据
 89 
 90     s.seekg(0,ios::beg);
 91     int z3[10]={0};
 92     cout<<"second:";
 93     for(i=0;i<10;i++)
 94     {
 95         s.read((char *)&z3[i],sizeof(z3[0])); //
 96         cout<<z3[i]<<"  ";
 97     }
 98     cout<<endl;
 99     //读出second中的10个整数,检查是否符合预期
100 
101     f.close();
102     s.close();
103     //关闭文件
104     return 0;
105 }
106 void bubblesort(int arr[],int n)
107 {
108     int temp;
109     for(int i=1;i<n;i++)
110         for(int j=0;j<n-i;j++)
111         {
112             if(arr[j]>arr[j+1])
113             {
114                 temp=arr[j];
115                 arr[j]=arr[j+1];
116                 arr[j+1]=temp;
117             }
118         }
119 }

 

 

1.调用exit(1);需包含#include <cstdlib>

2.fstream f("first.dat",ios::in|ios::out|ios::binary);open)—close()成对出现。

定义、关联、打开/创建

3.注意file reading marker位置,根据读写需要定位。例如,续写时,若marker不再末尾,需移到文件尾。

 

 

以上是关于文件操作的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode 如何操作用户自定义代码片段(快捷键)

代码片段 - Golang 实现集合操作

Apollo Codegen 没有找到生成代码的操作或片段

VSCode自定义代码片段——.vue文件的模板

操作栏标签片段中的片段?