• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 131, comments - 12, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            C++讀寫文件

            Posted on 2012-10-17 16:32 盛勝 閱讀(396) 評論(0)  編輯 收藏 引用
            掌握文本文件讀寫的方法
            了解二進制文件的讀寫方法

            C++文件流:
            fstream  // 文件流
            ifstream  // 輸入文件流
            ofstream  // 輸出文件流

            //創建一個文本文件并寫入信息
            //同向屏幕上輸出信息一樣將信息輸出至文件
            #include<iomanip.h>
            #include<fstream.h>
            void main()
            {
              ofstream f1("d:\\me.txt");           //打開文件用于寫,若文件不存在就創建它
              if(!f1)return;                 //打開文件失敗則結束運行
              f1<<setw(20)<<"姓名:"<<"廉東方"<<endl;     //使用插入運算符寫文件內容
              f1<<setw(20)<<"家庭地址:"<<"河南鄭州"<<endl;
              f1.close();                   //關閉文件
            }
            運行后打開文件d:\me.txt,其內容如下:
                   姓名:廉東方
                 家庭地址:河南鄭州

            文件操作:
            打開文件
              文件名
                注意路徑名中的斜杠要雙寫,如:
                "D:\\MyFiles\\ReadMe.txt"
              文件打開方式選項:
                ios::in    = 0x01, //供讀,文件不存在則創建(ifstream默認的打開方式)
                ios::out    = 0x02, //供寫,文件不存在則創建,若文件已存在則清空原內容(ofstream默認的打開方式)
                ios::ate    = 0x04, //文件打開時,指針在文件最后。可改變指針的位置,常和in、out聯合使用
                ios::app    = 0x08, //供寫,文件不存在則創建,若文件已存在則在原文件內容后寫入新的內容,指針位置總在最后
                ios::trunc   = 0x10, //在讀寫前先將文件長度截斷為0(默認)
                ios::nocreate = 0x20, //文件不存在時產生錯誤,常和in或app聯合使用
                ios::noreplace = 0x40, //文件存在時產生錯誤,常和out聯合使用
                ios::binary  = 0x80  //二進制格式文件
              文件保護方式選擇項:
                filebuf::openprot;   //默認的兼容共享方式
                filebuf::sh_none;    //獨占,不共享
                filebuf::sh_read;    //讀共享
                filebuf::sh_write;   //寫共享
              打開文件的方法
                調用構造函數時指定文件名和打開模式
                ifstream f("d:\\12.txt",ios::nocreate);         //默認以 ios::in 的方式打開文件,文件不存在時操作失敗
                ofstream f("d:\\12.txt");                //默認以 ios::out的方式打開文件
                fstream f("d:\\12.dat",ios::in|ios::out|ios::binary); //以讀寫方式打開二進制文件
                使用Open成員函數
                fstream f;
                f.open("d:\\12.txt",ios::out);             //利用同一對象對多個文件進行操作時要用到open函數
            檢查是否成功打開
              成功:
                if(f){...}       //對ifstream、ofstream對象可用,fstream對象不可用。
                if(f.good()){...}
              失敗:
                if(!f){...}       // !運算符已經重載
                if(f.fail()){...}
            讀寫操作
              使用<<,>>運算符
              只能進行文本文件的讀寫操作,用于二進制文件可能會產生錯誤。
              使用函數成員 get、put、read、write等
              經常和read配合使用的函數是gcount(),用來獲得實際讀取的字節數。
            讀寫二進制文件注意事項
              打開方式中必須指定ios::binary,否則讀寫會出錯
              用read\write進行讀寫操作,而不能使用插入、提取運算符進行操作,否則會出錯。
              使用eof()函數檢測文件是否讀結束,使用gcount()獲得實際讀取的字節數
            關閉文件
              使用成員函數close,如:
              f.close(); 
              利用析構函數
              對象生命期結束時會檢查文件是否關閉,對沒有關閉的文件進行關閉操作。
            隨機讀寫文件
              通過移動文件讀寫指針,可在文件指定位置進行讀寫。
              seekg(絕對位置);      //絕對移動,    //輸入流操作
              seekg(相對位置,參照位置);  //相對操作
              tellg();          //返回當前指針位置
              seekp(絕對位置);      //絕對移動,    //輸出流操作
              seekp(相對位置,參照位置);  //相對操作   
              tellp();          //返回當前指針位置
              參照位置:
              ios::beg  = 0       //相對于文件頭
              ios::cur  = 1       //相對于當前位置
              ios::end  = 2       //相對于文件尾
            讀寫文本文件的示例
            //為能夠正確讀出寫入文件的各數據,各數據間最好要有分隔
            #include<fstream.h>
            void main()
            {
              fstream f("d:\\try.txt",ios::out);
              f<<1234<<' '<<3.14<<'A'<<"How are you"; //寫入數據
              f.close();
              f.open("d:\\try.txt",ios::in);
              int i;
              double d;
              char c;
              char s[20];
              f>>i>>d>>c;               //讀取數據
              f.getline(s,20);
              cout<<i<<endl;             //顯示各數據
              cout<<d<<endl;
              cout<<c<<endl;
              cout<<s<<endl;
              f.close();
            }
            運行結果:
            1234
            3.14
            A
            How are you
            Press any key to continue
            顯示文本文件的內容
            //使用get()一次讀一個字符--------------------------------方案一
            #include<fstream.h>
            void main()
            {
              ifstream fin("d:\\簡介.txt",ios::nocreate);
              if(!fin){
                cout<<"File open error!\n";
                return;
              }
              char c;
              while((c=fin.get())!=EOF)cout<<c;    //注意結束條件的判斷
              fin.close();
            }
            //使用get(char *,int n,char delim='\n')一次讀多個字符----方案二
            //巧妙利用文本文件中不會有字符'\0'的特點進行讀取
            #include<fstream.h>
            void main()
            {
              ifstream fin("d:\\簡介.txt",ios::nocreate);
              if(!fin){
                cout<<"File open error!\n";
                return;
              }
              char c[80];
              while(fin.get(c,80,'\0')!=NULL)cout<<c; //注意結束條件的判斷
              fin.close();
            }
            //使用read(char *,int n)讀文件---------------------------方案三
            #include<fstream.h>
            void main()
            {
              ifstream fin("d:\\簡介.txt",ios::nocreate);
              if(!fin){
                cout<<"File open error!\n";
                return;
              }
              char c[80];
              while(!fin.eof())            //判斷文件是否讀結束
              {
                fin.read(c,80);
                cout.write(c,fin.gcount()); 
              }
              fin.close();
            }
            拷貝文件
            //二進制文件操作示例
            #include<fstream.h>
            void main()
            {
              ifstream fin("C:\\1.exe",ios::nocreate|ios::binary);
              if(!fin){
                cout<<"File open error!\n";
                return;
              }
              ofstream fout("C:\\2.exe",ios::binary);
              char c[1024];
              while(!fin.eof())
              {
                fin.read(c,1024);
                fout.write(c,fin.gcount());
              }
              fin.close();
              fout.close();
              cout<<"Copy over!\n";
            }
            久久久久国产亚洲AV麻豆| 99久久亚洲综合精品成人| 国内精品伊人久久久影院| 无码人妻久久一区二区三区蜜桃| 国内精品久久国产| 国产精品久久自在自线观看| 韩国三级中文字幕hd久久精品| 久久99国产精品久久99小说| 久久久久人妻一区精品色| 久久亚洲高清观看| 久久精品免费全国观看国产| 青青草原1769久久免费播放| 久久综合偷偷噜噜噜色| 一级做a爰片久久毛片16| 中文字幕久久久久人妻| 久久精品国产色蜜蜜麻豆| 精品久久久无码人妻中文字幕豆芽| 久久精品无码一区二区三区日韩| 久久99热这里只有精品国产| 久久久久99精品成人片三人毛片| 久久国产精品77777| 亚洲熟妇无码另类久久久| 日韩十八禁一区二区久久| 成人午夜精品久久久久久久小说| 亚洲香蕉网久久综合影视 | 亚洲精品国精品久久99热一| 亚洲国产精品久久久久网站 | 91精品国产高清久久久久久国产嫩草| 亚洲国产成人精品无码久久久久久综合| 99re久久精品国产首页2020| 欧美黑人又粗又大久久久 | 国产成人99久久亚洲综合精品| 久久精品无码专区免费青青| 国内精品久久久久影院老司 | 久久精品18| 久久国产免费| 久久久久久极精品久久久| 久久久久久毛片免费看| 一本久道久久综合狠狠躁AV| 伊人热热久久原色播放www| 久久人妻少妇嫩草AV蜜桃|