在程序設計中,文件經常使用的操做不外乎——打開、讀、寫、流指針操做、關閉。我平常中使用的比較多,但歷來 沒有細細總結今天就總結下具體的用法。ios
計算機上的文件實際上是數據的集合,對文件的讀寫實際上是對數據的讀寫。
文件能夠大體分爲兩種:文本文件和二進制文件。
一、文本文件:它的每個字節存放的是一個ASCII碼,表明一個字符。
二、二進制文件:將內存中的數據按照其在內存中的存儲形式原樣存放在磁盤上。咱們用記事本打開則是亂碼。數組
文件的相對路徑(重在理解)——英文的雙引號
定義:目標文件相對於當前文件的路徑。
表達形式:
(1)"./「或」.」表示顯示當前目錄,也能夠省略,表示默認當前目錄
(2)」…/"或」…」表示返回到上一級的目錄。
(3)若是有多個上一級目錄,可使用多個「…/」或」…」。app
(三)文件的打開方式
ios::in 以輸入方式打開文件,支持讀數據流。若是文件不存在會找不到文件。
ios::out 以輸出方式打開文件,支持寫數據流。若是文件不存在則新建,若是文件存在就清空其原有內容。
ios::app 輸出的數據追加到文件末尾,只支持讀,不支持寫
ios::ate 打開一個文件,並將指針定位到文件末尾
ios::trunc 打開一個文件,若是文件不存在則新建,若是存在,則清空原有文件中的內容
ios::binary 以二進制方式打開文件,若是不指定則默認採用文本方式打開文件
說明:
①缺省時,默認爲以輸出和輸入方式打開文件,支持讀和寫數據流。
②當以多種形式打開文件時,中間用運算符」|」(或)鏈接起來。如:
ios::in | ios::out 以輸出和輸入方式打開文件
ios::out| ios::binary 以輸出方式打開一個二進制文件函數
對文件進行讀寫操做首先必需要定義一個數據流對象指針。數據流對象指針有三種類型,在這裏我只介紹一種我最經常使用的方式:fstream
(頭文件#include<fstream>
)
表示文件讀取/寫入流,對文件進行讀和寫操做,既能夠將數據從存儲設備讀取到內存中,也能夠將數據從內存寫入存儲設備中。
下面代碼實例:.net
fstream f1("F:\\DAAT.txt",ios::in | ios::out|ios::trunc);//定義一個名爲f1的數據流指針,而且以in/out/trunc方式打開文件,支持讀和寫操做。 if(!f1)cout<<"未找到文件"<<endl;
(1)tellg( )
根據ANSI-C++ 標準,就是一個整數,表明當前讀取流指針的位置;
long long m=f1.tellg( );//返回f1的位置
*設置讀取流指針的位置
①seekg ( pos_type position );
(2)tellp( )
根據ANSI-C++ 標準,就是一個整數,表明當前寫入流指針的位置;
long long m=f2.tellp( );//返回f2的位置
設計
*設置寫入流指針的位置
①seekp ( pos_type position );
指針
*文件的open函數的具體使用:egcode
fstream f1,f2;//定義一個名爲f1的數據流指針 f1.open("D:\\a.txt"); //以讀和寫方式打開D盤中的a.txt文件,與f1("F:\\DAAT.txt",ios::in | ios::out|ios::trunc);這種方式結果一致。 F2.open(「../a.txt」.ios::in);//以讀方式打開當前目錄的上級目錄中的a.txt文件
*文件的關閉
文件的關閉很是重要,每次使用後必須關閉,否則會形成其餘後果。
f1。close();
便可對象
①定義一個數據指針流;(注:根據寫操做選擇對應的數據指針流類型)
②表達形式:數據指針流 << 被寫入的對象;blog
char b[]="李虎ftv句柄飽和度iyivbh oguobhnynbubo8ubu0nn 88898 76y8 9980 bhh"; int i=0; fstream f1("F:\\DAAT.txt",ios::in | ios::out|ios::trunc);//定義一個名爲f1的數據流指針 if(!f1)cout<<"未找到文件"<<endl; f1.seekg(ios::beg); //重置數據流指針 for (i=0;i<strlen(b);i++) { f1<<b[i];//依次將數組裏面的東西寫入文件中。 }
①定義一個數據指針流;(注:根據讀操做選擇對應的數據指針流類型)
②表達形式:數據指針流 >> 讀取後存儲的對象;
注意:讀取數據時按照文件中數據的格式讀取。
法一: nt b[10]; fstream f2;//定義一個名爲f2的數據流指針 f2.open("D:\\a.txt"); //以讀和寫方式打開D盤中的a.txt文件 for (int i = 0; i < 10; i++) { f1 >> b[i] ; //讀取時會根據文件中的格式讀取。 } f2.close();//關閉文件 //法二: //char b[] //f1.open("D:\\DAAT.txt"); //以讀和寫方式打開D盤中的a.txt文件 //if(!f1)cout<<"未找到文件"<<endl; //f1.seekg(ios::beg); //重置數據流指針 //f1.getline(b,80,EOF);eof()函數是判斷文件是否讀到了末尾。 //cout<<b<<endl;
此處我沒有整理,你們能夠參考他的這篇文章,寫的很詳細:https://blog.csdn.net/weixin_43956598/article/details/90694117;
Is_open( ) 判斷文件是否處於打開的狀態。若是是,返回true;若是不是,返回false
eof() 判斷讀文件是否到達文件末尾。若是是,返回true;若是不是,返回false
bad() 若是在讀寫過程當中出錯,返回 true 。例如:當咱們要對一個不是打開爲寫狀態的文件進行寫入時,或者咱們要寫入的設備沒有剩餘空間時,就會報錯。
fail() 除了與bad() 一樣的狀況下會返回 true 之外,加上格式錯誤時也返回true ,例如當想要讀入一個整數,而得到了一個字母的時候。
good() 這是最通用的:若是調用以上任何一個函數返回true 的話,函數返回 false 。
clear() 重置以上成員函數所檢查的狀態標誌。