目錄
今天寫資料結構的時候涉及到了檔案的操作,因為已經碰到好多次了而我總是對這部分不太熟悉,於是索性就來寫個簡單的應用總結吧。
一、開啟檔案
二、關閉檔案
三、讀寫檔案(文字檔案和二進位制檔案)
1、文字檔案:
2、二進位制檔案:
3、讀寫資料塊
四、檢測eof
五、檔案定位
還有更多的細節就不在這裡深究了,感興趣的小夥伴可以自己去查閱資料哈。
成員函式open(),
原型 :void open(const char* filename, int mode, int access);
引數:filename:要開啟的檔名,mode開啟檔案的方式,access開啟檔案的屬性
access:(可使用|或+連線)
0普通檔案,開啟訪問
1唯讀檔案
2隱含檔案
4系統檔案
使用:開啟檔案code.txt
1.fstream file1;
file1.open("code.txt", ios::in|ios::out, 0);
2.省略後兩個引數預設以讀寫普通檔案開啟
fstream file1;
file1.open("code.txt");
3.定義的時候開啟
fstream file1("code.txt")
4.使用fstream的子類ifstream或ofstream預設以輸入或輸出方式開啟
ifstream file2("code.txt");
ofstream file3("code.txt");
成員函式close();
file1.close();
file2<<"i love you"; //向檔案寫入字串 "i love you"
int i;
file1>>i; //從檔案輸入乙個整數值。
控制格式(格式化):
dec 格式化為十進位制數值
endl 輸出乙個換行符並重新整理此流
ends輸出乙個空字元
hex 格式化為十六進製制
oct 格式化為八進位制
setprecision()設定精度
使用:file1<ps:
setprecision(5)是輸出5位有效數字,而fixed《標頭檔案:
1)逐行讀取, 將行讀入字串, 行之間用回車換行區分:
ifstream file1("code.txt");
getline(file1, str);
2) 逐詞讀取, 詞之間用空格區分
file1>> str
3)逐行讀取, 將行讀入字元陣列, 行之間用回車換行區分:
file1.getline(str, 125);
1.put()函式
原型:ofstream &put(char ch)
使用:file1.put('c'); //向流寫乙個字元'c'
2.get()函式
原型:1)ifstream &get(char &ch) //從流中儲存乙個字元,結果儲存在引用ch中如果到檔案尾,返回空字元
使用:file2.get(x);
2)int get();
使用:x=file2.get();
3)ifstream &get(char *buf, int num, char delim='n');
//把字元讀入由buf指向的陣列,直到讀入了num個字元或遇到了由delim指定的字元(預設為換行符'n')
使用:file2.get(str1, 127, 'a');
read()和write()成員函式
原型:read(unsigned char *buf, int num);
write(const unsigned char *buf, int num);
//read()從檔案中讀取num個字元到buf指向的快取中如果還未讀入num就到了檔案尾,可使用int gcount()函式來取得實際讀取的字元數。
//write()從buf指向的快取寫num個字元到檔案中,注意快取的型別是unsigned char *
使用:unsigned char str1="i love you";
int n[5];
ifstream in("***.***");
ofstream out("yyy.yyy");
out.write(str1, strlen(str1)); //把字串str1全部寫到yyy.yyy中
in.read((unsigned char*)n, sizeof(n)); //從***.***中讀取指定個整數
in.close();
out.close();
eof()函式檢測是否到達檔案尾,是返回非0值不是返回0.
原型:int eof();
使用:if(in.eof()showmessage("已經到達檔案尾!");
ps:這裡有個坑,因為eof()函式有乙個初始值 上程式的判斷順序會導致最後被讀兩遍,所以需要在讀取的後面加乙個判斷如果eof的值為ture了則停止讀取。
c++i/o系統管理兩個與乙個檔案相聯絡的指標。乙個是讀指標,它說明輸入操作在檔案中的位置;另乙個是寫指標,它說明下次寫操作的位置。
每次執行輸入或輸出時,相應的指標自動變化。所以c++的檔案定位分為讀位置和寫位置定位
對應的函式seekg()//讀位置和seekp()//寫位置.
原型:istream &seekg(streamoff offset, seek_dir origin);
ostream &seekp(streamoff offset, seek_dir origin);
streamoff定義於iostream.h中,定義有偏移量offset所能取得的最大值
seek_dir表示移動的基準位置,有以下值:
ios::beg 檔案開頭
ios::cur 檔案當前位置
ios::end 檔案結尾
ps:
雖然也可以用於文字檔案但會因為系統對字元的解釋而與預想值不同
使用:file1.seekg(1234, ios::cur); //把檔案的讀指標從當前位置向後移1234個位元組
file2.seekp(1234, ios::beg); //把檔案的寫指標從檔案開頭向後移1234個位元組
C語言檔案操作 開 關 讀 寫
概述 1.乙個c檔案是乙個位元組流或二進位製流,它把資料看作是一連串的字元 位元組 而不考慮記錄的界限。在c語言中對檔案的訪問是以字元 位元組 為單位的。注 流式檔案 輸出時不會自動增加回車換行符以作為記錄結束的標誌,輸入時不以回車換行符作為記錄的間隔 2.ansi c標準使用緩衝檔案系統處理文字檔...
C 中檔案的讀寫操作
一.檔案的讀取 1.匯入命名空間 using system.io 2.獲取檔案流 filestream fs new file path,filemode.open 3.獲取讀物件 streamreader sr new streamreader fs 4.執行讀操作 string s sr.rea...
C 中檔案的讀寫
無論讀寫都要包含標頭檔案 讀 從外部檔案中將資料讀到程式中來處理 對於程式來說,是從外部讀入資料,因此定義輸入流,即定義輸入流物件 ifsteam infile,infile就是輸入流物件。這個物件當中存放即將從檔案讀入的資料流。假設有名字為myfile.txt的檔案,存有兩行數字資料,具體方法 i...