File Access 井民全製作
字串的輸入/輸出 從鍵盤讀取字串: 方法一: operator>> string x; cout << "用cin讀字串\n 請輸入字串(不含空白) => "; cin >> x; 方法二: getline(...) string x; cout << "讀字串直到換行\n 請輸入字串(可含空白)=> "; getline(cin , x , '\n' ); string x; cout << "用cin讀字串\n 請輸入字串(不含空白) => "; cin >> x; string x; cout << "讀字串直到換行\n 請輸入字串(可含空白)=> "; getline(cin , x , '\n' );
寫字串到檔案 我們使用 ofstream 物件 你要 include 的檔案 #include <fstream> using namespace std; int main(int argc, char* argv[]) { ofstream outfile(“c:\\TEST.TXT"); //指定檔名 outfile << "學生:\n"; outfile << "學號:\n"; outfile << "帳號:\n"; outfile << "密碼:\n"; return 0; } 當 outfile出了宣告範圍,會自動 執行關檔的動作, 所以不用自行close. 你要 include 的檔案 完整程式範例: oLine.cpp
從檔案讀取字串 我們使用 ifstream 物件 Step 1 缺點: 不能讀取空白字元 Step 2 #include <fstream> #include <iostream> #include <string> using namespace std; int main(int argc, char* argv[]){ string x; // 建立一個讀取物件 ifstream input(“c:\\test.txt"); // 判斷是否讀完 while(input){ // 讀取字串 input >> x; cout << x << endl; } return 0; } Step 1 缺點: 不能讀取空白字元 Step 2
從檔案讀取字串 使用 getline function 檔案到結尾時,infile =0, 藉此判斷何時停止讀檔 Step 1: 開檔 #include <fstream> #include <iostream> using namespace std; int main(int argc, char* argv[]) { const int MAX =80; char buffer[MAX]; // 開啟要讀取的檔案 ifstream infile(“c:\\test.txt"); while(infile) { // 從檔案讀資料 infile.getline(buffer,MAX); cout<< buffer << endl; // 強迫列印出來 cout << flush; } return 0; } 檔案到結尾時,infile =0, 藉此判斷何時停止讀檔 Step 1: 開檔 Step 2: 讀檔 getline: 讀取資料到 buffer, 直到遭遇 ‘\n’ 或 MAX 個 char 為止
練習: 1. 請建立一個新 project ,輸出自己的名字 生日到一個名為 Profile.txt 的文字檔中. Screen上
字元的輸入/輸出: 把字元輸出到檔案 利用 put(…) 可以把單一字元輸出到檔案中. 中文長度為 2. string strDataMining("我"); // 開啟一個名為 Test.txt 的檔案 ofstream outfile("Test.txt"); // strDataMing.size() 傳回 2 (中文字 2 bytes) for(int j=0; j<strDataMining.size() ;j++) outfile.put(strDataMining[j]); 中文長度為 2. 完整程式範例: oChar.cpp
字元的輸入/輸出:從檔案中讀取字元 我們使用 get method #include <iostream> // for cout #include <fstream> // for ifstream using namespace std; int main(int argc, char* argv[]) { char ch; ifstream infile("Test.txt"); while(infile) { infile.get(ch); if( ! infile.good()) // 若讀取失敗則跳出來 break; cout<<ch; } return 0; 注意: 中文字是兩個 bytes, 所以要讀兩次才會秀出來 完整程式範例: iChar.cpp
把 Object 存到檔案中: write write ( (char *) &物件變數,物件大小) class person { protected: char name[40]; int age; public: void getData(void) { cout << "Enter Name:"; cin >> name; cout << "Enter age: "; cin >> age; } }; Person class 的宣告 #incldue <fstream> using namespace std; int main(int argc, char* argv[]) { person Tom; Tom.getData(); ofstream outfile("PERSON.DAT"); outfile.write( (char *)&pers,sizeof(pers)); return 0; } 建立物件, 並且呼叫 該物件的 method 利用 write method 將物件的資料 寫到檔案中