前前言:
為什麼要學資料流stream跟file I/O?
那資料等等除了直接寫在程式裡,還可以怎麼輸入進C++程式?
然後顯示出來像看網頁的股市一樣跳出各種資訊,要有資料庫,那就得讀取電腦上我們已經抓下來的資料。
這篇聊到的是文字的寫入跟輸出。
前言:
我們之前聊到variable儲存在記憶體,但等程式結束後就會清空,如果要讓資料在程式結束後還能保存,就要放到像硬碟這樣的儲存地放,今天的主題就是聊資料file存放、讀取跟寫入。
資料流是什麼?
資料流就是例如我們鍵盤打cin >> apple
到C++程式中,表示鍵盤輸入的會儲存進apple裡。
從程式輸出資料 >> 到螢幕,從鍵盤輸入 >> 到程式中。
還記得到現在所有範例的檔案最上頭都有一行#include<iostream>
嘛?這個就是表示支持輸出輸入的意思。
檔案可以運作文字檔案或是二進制檔案,除了字元以外的檔案所有資料都是二進位檔案喔,例如圖片、影片和其他的資料,這邊是以輸入文字.txt檔案做示範。
必須包含header檔案: <fstream>
然後後面加上file object,這個是為著等等要跟我們真正想開啟的檔案做連結,
fstream randomName; //這個是file object
上面這樣表示可以讀寫
定義完之後要來決定,給檔案什麼模式開啟。
有兩種常用模式:
fstream randomName; //這個是file object
randomName.open("filename.txt", ios::out); //連結,
上面表示randomNAme這個object是可以讀寫的,但現在連結到filename.txt是以“只能寫模式”開啟檔案。
想要同時開啟讀寫功能可以:
randomName.open("filename.txt", ios::in | ios::out);
各種不同的開啟模式:
開始輸入資料
重要:必須檢查檔案是否開啟再做讀寫動作。
myfile << 998; //998被寫入myfile中
if(!randomName.is_open()){
cout << "Error" << endl;
}else {
randomName << “白日依山盡” << endl;
randomName << “黃河入海流” << endl;
}
randomeName.close(); //關閉randomName檔案
最後!
養成好習慣隨手關檔案,為什麼呢?避免開啟太多檔案系統當掉。
引用CSDN:
当程序向输出设备中输出数据时,输出的数据先被存放在计算机缓冲区(Buffer)内。当缓冲区存满时,这些数据才真正地输出到输出设备。但是,如果输出的字符序列中出现了endl控制符,那么缓冲区内的所有数据将立即输出到输出设备,而无论缓冲区是否已经存满。因此,endl的作用将光标移动到输出设备中下一行开头处,并且清空缓冲区。
————————————————
版权声明:本文为CSDN博主「Jaster_wisdom」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Jaster_wisdom/article/details/52400059
之前Day03C++資料輸入講到
不同的輸入,
以下是以上方法做的ASCII轉換器範例:
之前也做過一個幼幼版的,請參考Day04 - C++好簡單之來寫一個ASCII轉換器吧!基本輸入/輸出Input/Output應用。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
//
fstream myFile;
myFile.open("ASCII.txt", ios::out); //從鍵盤寫入到程式模式
if(myFile.is_open()){
myFile << "99 97 114\n";
myFile << "97 112 112 108 101\n";
myFile.close();
}
myFile.open("ASCII.txt", ios::in); //從程式輸出到螢幕模式
int line;
if(myFile.is_open()){
while(myFile >> line){
cout << char(line);
cout <<" ";
}
myFile.close();
}
}
Reference: CodeBeauty(Youtube), CSDM, stackOverflow