c語言中,對文件的操作一般通過文件指針FILE*來進行。然而,c++有着更為便捷的操作——文件流。好吧,其實我也不是很熟悉“流”的具體概念,等以后深入學習后,一定會把這個坑填上。
在此簡單記錄一下文件流fstream的用法;
可以簡單得把它看成一個類,包含在頭文件<fstream>中。當我們寫上#include<fstream>后,就可以使用ifstream,ofstream,fstream三個類來定義對象了。
例如:ifstream infile(); 成功定義了一個名叫infile的對象,可以調用ifstream中的函數;
但是,此時infile只是一個對象,並沒有和我們需要讀取的文件產生關聯。
目前,我發現共有兩種方式
1、通過ifstream的函數 .open(),這個函數有幾種重載的方式
- 首先,關於路徑,一共有5種方式:
- 相對路徑,當你所要操作的文件與你的.cpp文件在同一個目錄下,就可以使用相對路徑,相對路徑必須將文件格式寫清楚,例如:infile.open("ans.txt");
- 絕對路徑,可以搜索到電腦中所有的文件,但路徑必須正確,例如:infile.open("D:\Codeblock\test\formulations.txt");
- 可以填入一個是指向字符串文件名的指針,例如:const char* str=”ans.txt"; infile.open(str);
- 可以填寫一個內容等於文件名字的string常量,例如:const string str = “ans.txt"; infile.open(str);
- 如果不是const string ,而是string,那必須使用infile(str.c_str()); 此處.c_str()是string的一個成員函數,目標是將string變成const string .關於string和const string 之間的區別嘛,emmmmmm,有空一定填上
-
ios::app //在文件末尾補入 ios::ate //定位到文件末尾,app包含此項屬性 ios::binary //以二進制的方式讀取文件 ios::in //讀文件 ios::out //輸入文件 ios::nocreate //不創造,如果文件不存在,則失敗 ios::noreplace//不覆蓋,如果文件存在,則失敗 ios::trunc //如果文件存在,則將文件內容清空
3.多種文件的打開方式能使用或運算("|") ,例如:infile("ans.txt",ios::app | ios::out);
4.打開文件的屬性,prot.好像不常用,等哪天用到了,再來寫
2. 第二種打開方式則更為簡單,利用初始化的方法,例如 ifstream infile("ans.txt");
當然,初始化的時候,也可以加上mode,例如 ifstream infile("ans.txt",ios::app);
.is_open() 的用法
#include <fstream> using namespace std; int mian() { ifstream infile ; infile.open("ans.txt"); if(!infile.is_open()) { cout<<"Wrong"<<endl; return 0; } ....................... return 0; }