zoukankan      html  css  js  c++  java
  • C++文件操作案例

    案例一:
        1.打开文件,显示其中内容
        2.向其中追加记录
        3.显示追加之后的文件内容
            #include<iostream>
            #include<fstream>
            #include<iomanip>
            #include<stdlib.h>
            using namespace std;
            inline void eatline() { while (std::cin.get() != ' ')continue; }
            struct planet
            {
                char name[20];
                double population;
                double g;
            };
            const char* file = "planets.dat";
            int main()
            {
                planet pl;
                cout << fixed << right;
                ifstream fin;
                fin.open(file, ios_base::in | ios_base::binary);
                if (fin.is_open())
                {
                    cout << "Here are the current contents of the " << file << "file: ";
                    while (fin.read((char*)&pl, sizeof pl))
                    {
                        cout << setw(20) << pl.name << ": "
                            << setprecision(0) << setw(12) << pl.population
                            << setprecision(2) << setw(6) << pl.g << endl;
                    }
                    fin.close();
                }
                ofstream fout(file, ios_base::out | ios_base::app | ios_base::binary);
                if (!fout.is_open())
                {
                    cerr << "Can't Open " << file << "fiel for output: ";
                    exit(EXIT_FAILURE);
                }
                cout << "Enter plant name(Enter a blank line to quit): ";
                cin.get(pl.name, 20);
                while (pl.name[0] != '')
                {
                    eatline();
                    cout << "Enter planetary population:";
                    cin >> pl.population;
                    cout << "Enter planet's acceleration of gravity:";
                    cin >> pl.g;
                    eatline();
                    fout.write((char *)&pl, sizeof pl);
                    cout << "Enter planet name (Enter a blank line to quit): ";
                    cin.get(pl.name, 20);
                }
                fout.close();
     
                fin.clear();
                fin.open("file, ios_base::in | ios_base::binary);
                if (fin.is_open())
                {
                    cout << "Here are the new contents of the " << file << "file: ";
                    while (fin.read((char*)&pl, sizeof pl))
                    {
                        cout << setw(20) << pl.name << ": "
                            << setprecision(0) << setw(12) << pl.population
                            << setprecision(2) << setw(6) << pl.g << endl;
                    }
                    fin.close();
                }
                cout << "Done! ";
            }
     
    案例二:
     
        1.打开文件显示其中内容
        2.选择要修改的记录
        3.显示选中的要修改的记录
        4.修改记录
        5.显示修改之后的内容
            #include<iostream>
            #include<fstream>
            #include<iomanip>
            #include<stdlib.h>
            using namespace std;
            const int LIM = 20;
            struct planet
            {
                char name[LIM];
                double population;
                double g;
            };
            const char* file = "Planet.dat";
            inline void eatline() { while (cin.get() != ' ')continue; }
            int main()
            {
                /*ofstream fout("Planet.dat");
                fout.close();*/
                planet pl;
                cout << fixed;
                fstream finout;
                finout.open(file, ios_base::in | ios_base::out | ios_base::binary);
                int ct = 0;
                if (finout.is_open())
                {
                    finout.seekg(0);
                    cout << "Here are the current contents of the " << file << "file: ";
                    while (finout.read((char *)&pl,sizeof pl))
                    {
                        cout << ct++ << ": " << setw(LIM) << pl.name << ": "
                            << setprecision(0) << setw(12) << pl.population
                            << setprecision(2) << setw(6) << pl.g << endl;
     
                    }
                    if (finout.eof())
                    {
                        finout.clear();
                    }
                    else
                    {
                        cerr << "Error in reading" << file << ". ";
                        exit(EXIT_FAILURE);
                    }
                }
                else
                {
                    cerr << file << "could not be opened--bye. ";
                    exit(EXIT_FAILURE);
                }
     
                cout << "Enter the record number you wish to change: ";
                long rec;
                cin >> rec;
                eatline();
                if (rec<0 || rec >= ct)
                {
                    cerr << "Invalid record bumber --bye  ";
                    exit(EXIT_FAILURE);
     
                }
                streampos place = rec * sizeof pl;
                finout.seekg(place);
                if (finout.fail())
                {
                    cerr << "Error on attempted seek ";
                    exit(EXIT_FAILURE);
                }
     
                finout.read((char *)&pl, sizeof pl);
                cout << "Your selection: ";
                cout << rec << ": " << setw(LIM) << pl.name << ": "
                    << setprecision(0) << setw(12) << pl.population
                    << setprecision(2) << setw(6) << pl.g << endl;
                if (finout.eof())
                {
                    finout.clear();
                }
     
                cout << "Enter planet name: ";
                cin.get(pl.name, LIM);
                eatline();
                cout << "Enter planetary population: ";
                cin >> pl.population;
                cout << "Enter planet's acceleration of gravity: ";
                cin >> pl.g;
                finout.seekp(place);
                finout.write((char*)&pl, sizeof pl) << flush;
     
                if (finout.fail())
                {
                    cerr << "Error on attempted write ";
                    exit(EXIT_FAILURE);
                }
                ct = 0;
                finout.seekg(0);
                cout << "Here are the new contents of the " << file << " file: ";
                while (finout.read((char *)&pl,sizeof pl))
                {
                    cout << ct++ << ":" << setw(LIM) << pl.name << ": "
                        << setprecision(0) << setw(12) << pl.population
                        << setprecision(2) << setw(6) << pl.g << endl;
                }
                cout << "Done! ";
                return 0;
            }
  • 相关阅读:
    eclipse下jsp文件报错解决方法
    使用vscode搭建本地的websocket
    tomcat的首次登录配置
    tomcat配置报错解决方法 The jre_home environment variable is not defined correctly
    cento升级openssl依旧显示老版本
    Centos6安装mysql5.7最新版
    Neutron服务组件
    网络OSI 7层模型
    Kubernetes的核心技术概念和API对象
    Xen 虚拟化技术
  • 原文地址:https://www.cnblogs.com/X-dream/p/5152435.html
Copyright © 2011-2022 走看看