未格式化檔案 I/O (转)
来源:互联网 发布:佛山楼市最新成交数据 编辑:程序博客网 时间:2024/06/05 06:09
在C++中要 開啟一個檔案,就是將它連結至一個串流,串流有三種型態:輸入串流(istream)、輸出串流(ostream)與輸入/輸出串流(iotream), 而與檔案處理相關的ifstream、ofstream及fstream則繼承這三個串流而來,它們的關係如下:
要處理檔案的輸出入,您必須先include <fstream>標頭,如果要處理檔案輸入,您要宣告一個ifstream物件,要處理檔案輸出,您要宣告一個ofstream物件,要處 理檔案的輸出入,您要宣告一個fstream物件,建立串流物件之後,可以使用open()函式來連結串流,open()函式的雛型宣告如下:
filename是檔案名稱,而mode決定檔案的開啟模式,它是由ios類別所定義的常數來決定,下面列出openmode的值與用途:
ios::in檔案open為輸入模式(istream default)ios::out檔案open為寫入(ostream default)ios::ate從檔案尾端輸入輸出ios::app在檔案尾端以append模式寫入ios::trunc如果檔案存在,則清除檔案內容ios::binary以二進位模式open檔案
以二進位模式開啟檔案,與文字模式開啟檔案的不同在於,文字模式會發生字元轉換,而二進位模式不會,例如int數字9,在文字模式下會被轉換為編碼57,而二進位模式下則直接寫入int資料。
如果您使用ofstream來開啟檔案,若指定的檔案原先存在,則檔案會被清空,您可以使用附加方式,或是使用ifstream並指定ios::in與ios::out,即可保留原檔案的內容。
可以使用下面這個片段來開啟一個檔案:
如果開啟失敗則串流會傳回false,您可以使用下面的片段來判斷:
最低階的輸出與輸出函式為get()和put()函式,它們被重載(overload)多次,我們這邊介紹最基本的字元輸入與輸出,它們的函式雛型如下:
當讀取至檔尾時,get()函式會傳回false,也可以使用eof()函式來判斷是否讀取至檔案尾端;下面這個程式示範如何讀入一個文字檔案,並顯示在主控台上:
在開啟串流之後,最後記得使用close()函式將串流關閉;編譯時我們設定輸出檔案為read,以下為執行結果:
read test1.cpp
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char* argv[]) {
char ch;
if(argc != 2) {
cout << "指令: read <檔案名稱>\n";
return 1;
}
略 ....
下面這個程式示範讀取使用者輸入,並將之寫入至檔案中:
編譯時設定輸出檔案為write,以下是執行結果示範:
write test.txt
輸入文字,以 'q' 字元結束
這是一個測試
輸入的文字將輸入至檔案中
q
程式結束後,開啟test.txt,當中會有您所輸入的資料
ios
|
--istream --|
| ---ifstream--|
| |
| |---iostream--|
--ostream --| | ---fstream
---ofstream--|
|
--istream --|
| ---ifstream--|
| |
| |---iostream--|
--ostream --| | ---fstream
---ofstream--|
要處理檔案的輸出入,您必須先include <fstream>標頭,如果要處理檔案輸入,您要宣告一個ifstream物件,要處理檔案輸出,您要宣告一個ofstream物件,要處 理檔案的輸出入,您要宣告一個fstream物件,建立串流物件之後,可以使用open()函式來連結串流,open()函式的雛型宣告如下:
void ifstream::open(const char *filename, openmode mode=ios::in);
void ofstream::open(const char *filename, openmode mode=ios::out | ios::trunc);
void fstream::open(const char *filename, openmode mode=ios::in | ios::out);
void ofstream::open(const char *filename, openmode mode=ios::out | ios::trunc);
void fstream::open(const char *filename, openmode mode=ios::in | ios::out);
filename是檔案名稱,而mode決定檔案的開啟模式,它是由ios類別所定義的常數來決定,下面列出openmode的值與用途:
ios::in檔案open為輸入模式(istream default)ios::out檔案open為寫入(ostream default)ios::ate從檔案尾端輸入輸出ios::app在檔案尾端以append模式寫入ios::trunc如果檔案存在,則清除檔案內容ios::binary以二進位模式open檔案
以二進位模式開啟檔案,與文字模式開啟檔案的不同在於,文字模式會發生字元轉換,而二進位模式不會,例如int數字9,在文字模式下會被轉換為編碼57,而二進位模式下則直接寫入int資料。
如果您使用ofstream來開啟檔案,若指定的檔案原先存在,則檔案會被清空,您可以使用附加方式,或是使用ifstream並指定ios::in與ios::out,即可保留原檔案的內容。
可以使用下面這個片段來開啟一個檔案:
ifstream fin;
fin.open("filename");
fin.open("filename");
如果開啟失敗則串流會傳回false,您可以使用下面的片段來判斷:
if(!fin) {
cout << "無法讀取檔案\n";
// 其它處理
}
cout << "無法讀取檔案\n";
// 其它處理
}
最低階的輸出與輸出函式為get()和put()函式,它們被重載(overload)多次,我們這邊介紹最基本的字元輸入與輸出,它們的函式雛型如下:
istream &get(char &ch);
ostream &put(char);
ostream &put(char);
當讀取至檔尾時,get()函式會傳回false,也可以使用eof()函式來判斷是否讀取至檔案尾端;下面這個程式示範如何讀入一個文字檔案,並顯示在主控台上:
#include <iostream> #include <fstream> using namespace std; int main(int argc, char* argv[]) { char ch; if(argc != 2) { cout << "指令: read <檔案名稱>" << endl; return 1; } ifstream fin; fin.open(argv[1]); if(!fin) { cout << "檔案I/O失敗" << endl; return 1; } while(!fin.eof()) { fin.get(ch); cout << ch; } fin.close(); return 0; }
在開啟串流之後,最後記得使用close()函式將串流關閉;編譯時我們設定輸出檔案為read,以下為執行結果:
read test1.cpp
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char* argv[]) {
char ch;
if(argc != 2) {
cout << "指令: read <檔案名稱>\n";
return 1;
}
略 ....
下面這個程式示範讀取使用者輸入,並將之寫入至檔案中:
#include <iostream> #include <fstream> using namespace std; int main(int argc, char* argv[]) { char ch; if(argc != 2) { cout << "指令: write <filename>" << endl; return 1; } ofstream fout(argv[1]); if(!fout) { cout << "檔案I/O失敗" << endl; return 1; } cout << "輸入文字,以 'q' 字元結束" << endl; do { cin.get(ch); fout.put(ch); } while(ch != 'q'); fout.close(); return 0; }
編譯時設定輸出檔案為write,以下是執行結果示範:
write test.txt
輸入文字,以 'q' 字元結束
這是一個測試
輸入的文字將輸入至檔案中
q
程式結束後,開啟test.txt,當中會有您所輸入的資料
- 未格式化檔案 I/O (转)
- C Gossip: 未格式化檔案 I/O
- 未格式化的行I/O
- 格式化I/O函数
- 格式化I/O
- 二进制、字符I/O、格式化I/O
- c++笔记08---I/O 流,格式化 I/O,非格式化 I/O,随机 I/O,二进制 I/O
- 5.11 标准I/O库_格式化I/O
- 格式化I/O和文本行I/O异同
- Linux C编程--格式化I/O
- chapter 9.6:格式化I/O请求
- c++中数据格式化的I/O
- C++输入输出流之格式化I/O
- I/O Stream<文件格式化输入输出>
- C语言专题——格式化I/O详解
- C语言专题——格式化I/O详解
- C++头文件iomanip(格式化I/O)
- 格式化I/O(常用的 sprintf 和 sscanf 总结)
- 把UIView切成任意形状
- sdut 1008 最大公共子串(求n个字符串的最长公共子串)
- cocos2d-x schedule 定时器
- ReadKey,ReadLine,格式输出
- Linux Makefile分析-vmlinux生成
- 未格式化檔案 I/O (转)
- Linux Makefile分析-vmlinux生成
- 利用第三方工具进行数据库转移——导入导出、备份还原
- 纹理特征-LBP的扩展VLBP
- User Guild for Initializing the Android Develop Environment with VMware player
- Hibernate主键生成策略
- oracle11中ORA-12505, TNS:listener does not currently know of SID given in connect desc
- curl 代理使用
- perl基础知识01【perl用处】