C++中文件操作頭文件:fstream
文件類型:文件文件和二進(jìn)制文件
文件操作三大類:
ofstream 寫操作
ifstream 讀操作
fstream:讀寫操作
文件打開方式:
標(biāo)志 | 說明 |
ios::in | 只讀 |
ios::out | 只寫,文件不存在則創(chuàng)建,存在則打開并截?cái)嘣瓋?nèi)容 |
ios::ate | 打開一個(gè)已有的文件,并指向文件讀指針指向文件尾,若文件不存在,則打開出錯(cuò) |
ios::app | 打開文件,從文件尾添加內(nèi)容,若文件不存在則創(chuàng)建 |
ios::trunc | 打開文件同時(shí)會(huì)截?cái)嘣瓋?nèi)容,單獨(dú)使用時(shí)與ios::out相同 |
ios::binary | 以二進(jìn)制方式打開 |
ios::in|ios::out | 打開文件,可讀也可寫,文件打開時(shí)原內(nèi)容保持不變,若不存在則打開出錯(cuò) |
ios::in|ios::out|ios::trunc | 打開文件,可讀寫,會(huì)截?cái)嘣瓋?nèi)容,文件不存在則創(chuàng)建 |
1.文本方式寫入示例
#include
#include
using namespace std;
int main()
{
/*1.創(chuàng)建文件*/
ofstream fp;
fp.open("test.txt",ios::out);//創(chuàng)建文件,會(huì)截?cái)嘣瓋?nèi)容
if (!fp.is_open())//文件打開失敗返回false
{
cout < "文件打開失敗!" < endl;
return 0;
}
fp < "C++文件操作示例!" < endl;
fp < "寫入數(shù)據(jù)測(cè)試" < endl;
fp < "姓名:IT_阿水" < "t工作方向:" < "嵌入式開發(fā)" < "t工作時(shí)間:" < "6年" < endl;
fp.close();//關(guān)閉文件
system("pause");
}
2.文本方式讀取示例
C++中讀取數(shù)據(jù)有多種方式實(shí)現(xiàn)。
2.1 示例1:重載>>讀取
#include
#include
using namespace std;
int main()
{
ifstream ifs;
ifs.open("test.txt",ios::in);//只讀方式打開
if (!ifs.is_open())
{
cout < "文件打開失敗!" < endl;
return 0;
}
string str;
while (ifs >> str)//以字符串方式讀取
{
cout < "str=" < str < endl;;
}
//關(guān)閉文件
ifs.close();
system("pause");
}
2.2 利用成員函數(shù)getline讀取
#include
#include
using namespace std;
int main()
{
ifstream ifs;
ifs.open("test.txt",ios::in);//只讀方式打開
if (!ifs.is_open())
{
cout < "文件打開失敗!" < endl;
return 0;
}
//第二種:getline()
char buff[1024];
while (ifs.getline(buff, sizeof(buff)))
{
cout < "buff=" < buff < endl;
}
//關(guān)閉文件
ifs.close();
system("pause");
}
2.3 單個(gè)字符方式讀取get()
#include
#include
using namespace std;
int main()
{
ifstream ifs;
ifs.open("test.txt",ios::in);//只讀方式打開
if (!ifs.is_open())
{
cout < "文件打開失敗!" < endl;
return 0;
}
//第三種:?jiǎn)蝹€(gè)字符方式讀取
char c;
while ((c = ifs.get()) != EOF)
{
cout < c;
}
//關(guān)閉文件
ifs.close();
system("pause");
}
3.二進(jìn)制方式讀寫示例
- 二進(jìn)制數(shù)據(jù)寫入文件
函數(shù):write(const _Elem* _Str, streamsize _Count)
形參:_Str --寫入的內(nèi)容的起始地址
_Count --寫入的字節(jié)數(shù)
- 二進(jìn)制數(shù)據(jù)讀取文件
read(_Elem* _Str, streamsize _Count) ;
形參:_Str --讀取內(nèi)容存放緩沖區(qū)
_Count --要讀取的字節(jié)數(shù)
#include
#include
#include
using namespace std;
class Person
{
public:
Person() {}
Person(const char* name, int age)
{
strcpy_s(this->name, name);
this->age = age;
}
char name[20];//姓名
int age;//年齡
};
int main()
{
/*二進(jìn)制寫入數(shù)據(jù)示例*/
fstream fs("test.doc", ios::out | ios::binary);
if (!fs.is_open())
{
cout < "文件創(chuàng)建失敗" < endl;
return 0;
}
Person p("小王", 18);
fs.write((const char *) & p, sizeof(p));//寫入內(nèi)容
fs.close();//關(guān)閉文件
/*二進(jìn)制讀取數(shù)據(jù)示例*/
fs.open("test.doc", ios::in | ios::binary);
if (!fs.is_open())
{
cout < "文件打開失敗" < endl;
return 0;
}
Person p2;
fs.read((char *) & p2, sizeof(p2));
cout < "讀取的內(nèi)容:" < endl;
cout < "姓名:" < p2.name < "t年齡:" < p2.age < endl;
fs.close();
system("pause");
}
4.C++指針偏移
C++文件指針偏移
seekg(pos_type _Pos,ios_base::seekdir _Way) --用于輸入流,偏移位置指針到指定位置
seekp(pos_type _Pos,ios_base::seekdir _Way) --用于輸出流,偏移位置指針到指定位置
第一個(gè)參數(shù):偏移量
第二個(gè)參數(shù):基于哪個(gè)位置
ios::beg --文件頭
ios::end --文件尾
ios::cur --當(dāng)前位置
streamoff tellg() --用于輸入流,返回當(dāng)前指針位置,streamoff 是一個(gè)long long類型
streamoff tellp() --用于輸出流,返回當(dāng)前指針位置
返回值返回基于文件頭的偏移量,字節(jié)為單位。失敗則返回-1
示例:
#include
#include
using namespace std;
int main()
{
ifstream fs;
fs.open("test.txt", ios::in );//打開文件,不存在則打開失敗,不會(huì)截?cái)嘣瓋?nèi)容
if (!fs.is_open())
{
cout < "文件打開失敗" < endl;
return 0;
}
fs.seekg(0,ios::end);//將文件指針偏移到文件末尾
char buff[1024];
streamoff size = fs.tellg();//獲取文件大小
cout < "文件大小:" < size < "字節(jié)" < endl;
fs.seekg(0, ios::beg);//將輸入流偏移到文件頭
while (fs >> buff)
{
cout < buff < endl;
}
fs.close();
system("pause");
return 0;
}
5.C++中使用fopen系列函數(shù)示例
#define _CRT_SECURE_NO_DEPRECATE
#include
using namespace std;
int main()
{
cout < "寫入數(shù)據(jù)示例:" < endl;
string file = "1.txt";
FILE* fp = fopen(file.c_str(),"w+b");
if (fp == NULL)
{
cout < "創(chuàng)建文件失敗" < endl;
}
char buff[] = "C語(yǔ)言格式文件讀寫操作示例!";
size_t size=fwrite(buff,1,sizeof(buff),fp);
cout < "文件寫入成功!size=" < size < endl;
fclose(fp);
cout < "讀取數(shù)據(jù)示例:" < endl;
fp = fopen(file.c_str(), "rb");
if (fp == NULL)
{
cout < "打開文件失敗" < endl;
}
char data[200];
size=fread(data, 1, sizeof(data), fp);
data[size] = '?';
cout < "讀取內(nèi)容:" < data < "t字節(jié)數(shù):" < size < endl;
fclose(fp);
system("pause");
}
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4327瀏覽量
62569 -
C++
+關(guān)注
關(guān)注
22文章
2108瀏覽量
73618 -
文件操作
+關(guān)注
關(guān)注
0文章
7瀏覽量
5342 -
頭文件
+關(guān)注
關(guān)注
0文章
25瀏覽量
9860
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
MSP430之裸奔框架C++程序源碼(菜農(nóng)C++裸奔大法系列之一) 轉(zhuǎn)載
/*------------------------------------------------------------------------MSP430之裸奔框架C++程序源碼(菜農(nóng)C++裸奔大法)本程序主要表現(xiàn)了
發(fā)表于 02-01 11:06
在main文件中怎樣去使用C++呢
ESP32 之 ESP-IDF 學(xué)習(xí)筆記(五 - 2)【使用C++的工程】文章目錄ESP32 之 ESP-IDF 學(xué)習(xí)筆記(五 - 2)【使用C++的工程】1、導(dǎo)言2、在main
發(fā)表于 01-07 07:44
如何在C++代碼中使用C頭文件
。 12.3.1 在C++中使用系統(tǒng)C頭文件 要包括標(biāo)準(zhǔn)的系統(tǒng) C 頭文件,如 stdio.h,不必進(jìn)行任何特殊
發(fā)表于 10-19 09:24
?3次下載
C++之操作符重載學(xué)習(xí)的總結(jié)
操作符重載是c++的強(qiáng)大特性之一;操作符重載的本質(zhì)是通過函數(shù)擴(kuò)展操作符的功能;operator 關(guān)鍵字是實(shí)現(xiàn)操作符重載的關(guān)鍵。
C++設(shè)計(jì)新思維-泛型編程與設(shè)計(jì)之應(yīng)用
C++設(shè)計(jì)新思維-泛型編程與設(shè)計(jì)之應(yīng)用
發(fā)表于 11-16 15:59
?3次下載
C++入門之表達(dá)式
C++中提供了很多操作符且定義了什么時(shí)候可以用于操作基本類型,其還允許我們定義用于操作class類型的操作符,接下來幾篇文章將會(huì)介紹
C++學(xué)習(xí)筆記之c++的基本認(rèn)識(shí)
自這篇文章我們即將開始C++的奇幻之旅,其內(nèi)容主要是讀C++ Primer的總結(jié)和筆記,有興趣可以找原版書看看,對(duì)于學(xué)習(xí)C++還是有很大幫助的。這篇文章將從一個(gè)經(jīng)典的程序開始介紹C++
C++入門之通用算法
C++ 是一種強(qiáng)大的編程語(yǔ)言,它提供了許多通用算法,可以用于各種容器類型。這些算法是通過迭代器來操作容器中的元素,因此它們是通用的,可以用于不同類型的容器。在本篇博客中,我們將詳細(xì)介紹 C++ 的通用算法。
C++之父新作帶你勾勒現(xiàn)代C++地圖
為了幫助大家解決這些痛點(diǎn)問題,讓大家領(lǐng)略現(xiàn)代C++之美,掌握其中的精髓,更好地使用C++,C++之父Bjarne Stroustrup坐不住了,他親自操刀寫就了這本《
評(píng)論