首页 > 编程语言 > 详细

C++文件操作案例

时间:2016-01-23 01:14:55      阅读:300      评论:0      收藏:0      [点我收藏+]
案例一:
    1.打开文件,显示其中内容
    2.向其中追加记录
    3.显示追加之后的文件内容
        #include<iostream>
        #include<fstream>
        #include<iomanip>
        #include<stdlib.h>
        using namespace std;
        inline void eatline() { while (std::cin.get() != ‘\n‘)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:\n";
                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:\n";
                exit(EXIT_FAILURE);
            }
            cout << "Enter plant name(Enter a blank line to quit):\n";
            cin.get(pl.name, 20);
            while (pl.name[0] != ‘\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):\n";
                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:\n";
                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!\n";
        }
 
案例二:
 
    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() != ‘\n‘)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:\n";
                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 << ".\n";
                    exit(EXIT_FAILURE);
                }
            }
            else
            {
                cerr << file << "could not be opened--bye.\n";
                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 \n";
                exit(EXIT_FAILURE);
 
            }
            streampos place = rec * sizeof pl;
            finout.seekg(place);
            if (finout.fail())
            {
                cerr << "Error on attempted seek\n";
                exit(EXIT_FAILURE);
            }
 
            finout.read((char *)&pl, sizeof pl);
            cout << "Your selection:\n";
            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\n";
                exit(EXIT_FAILURE);
            }
            ct = 0;
            finout.seekg(0);
            cout << "Here are the new contents of the " << file << " file:\n";
            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!\n";
            return 0;
        }

C++文件操作案例

原文:http://www.cnblogs.com/X-dream/p/5152435.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!