C++中文件操作頭文件:fstream
文件類型:文件文件和二進制文件
文件操作三大類:
ofstream 寫操作
ifstream 讀操作
fstream:讀寫操作
文件打開方式:
標志 | 說明 |
ios::in | 只讀 |
ios::out | 只寫,文件不存在則創(chuàng)建,存在則打開并截斷原內容 |
ios::ate | 打開一個已有的文件,并指向文件讀指針指向文件尾,若文件不存在,則打開出錯 |
ios::app | 打開文件,從文件尾添加內容,若文件不存在則創(chuàng)建 |
ios::trunc | 打開文件同時會截斷原內容,單獨使用時與ios::out相同 |
ios::binary | 以二進制方式打開 |
ios::in|ios::out | 打開文件,可讀也可寫,文件打開時原內容保持不變,若不存在則打開出錯 |
ios::in|ios::out|ios::trunc | 打開文件,可讀寫,會截斷原內容,文件不存在則創(chuàng)建 |
1.文本方式寫入示例
#include
#include
using namespace std;
int main()
{
/*1.創(chuàng)建文件*/
ofstream fp;
fp.open("test.txt",ios::out);//創(chuàng)建文件,會截斷原內容
if (!fp.is_open())//文件打開失敗返回false
{
cout < "文件打開失敗!" < endl;
return 0;
}
fp < "C++文件操作示例!" < endl;
fp < "寫入數據測試" < endl;
fp < "姓名:IT_阿水" < "t工作方向:" < "嵌入式開發(fā)" < "t工作時間:" < "6年" < endl;
fp.close();//關閉文件
system("pause");
}
2.文本方式讀取示例
C++中讀取數據有多種方式實現。
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;;
}
//關閉文件
ifs.close();
system("pause");
}
2.2 利用成員函數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;
}
//關閉文件
ifs.close();
system("pause");
}
2.3 單個字符方式讀取get()
#include
#include
using namespace std;
int main()
{
ifstream ifs;
ifs.open("test.txt",ios::in);//只讀方式打開
if (!ifs.is_open())
{
cout < "文件打開失敗!" < endl;
return 0;
}
//第三種:單個字符方式讀取
char c;
while ((c = ifs.get()) != EOF)
{
cout < c;
}
//關閉文件
ifs.close();
system("pause");
}
3.二進制方式讀寫示例
- 二進制數據寫入文件
函數:write(const _Elem* _Str, streamsize _Count)
形參:_Str --寫入的內容的起始地址
_Count --寫入的字節(jié)數
- 二進制數據讀取文件
read(_Elem* _Str, streamsize _Count) ;
形參:_Str --讀取內容存放緩沖區(qū)
_Count --要讀取的字節(jié)數
#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()
{
/*二進制寫入數據示例*/
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));//寫入內容
fs.close();//關閉文件
/*二進制讀取數據示例*/
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 < "讀取的內容:" < 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) --用于輸出流,偏移位置指針到指定位置
第一個參數:偏移量
第二個參數:基于哪個位置
ios::beg --文件頭
ios::end --文件尾
ios::cur --當前位置
streamoff tellg() --用于輸入流,返回當前指針位置,streamoff 是一個long long類型
streamoff tellp() --用于輸出流,返回當前指針位置
返回值返回基于文件頭的偏移量,字節(jié)為單位。失敗則返回-1
示例:
#include
#include
using namespace std;
int main()
{
ifstream fs;
fs.open("test.txt", ios::in );//打開文件,不存在則打開失敗,不會截斷原內容
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系列函數示例
#define _CRT_SECURE_NO_DEPRECATE
#include
using namespace std;
int main()
{
cout < "寫入數據示例:" < endl;
string file = "1.txt";
FILE* fp = fopen(file.c_str(),"w+b");
if (fp == NULL)
{
cout < "創(chuàng)建文件失敗" < endl;
}
char buff[] = "C語言格式文件讀寫操作示例!";
size_t size=fwrite(buff,1,sizeof(buff),fp);
cout < "文件寫入成功!size=" < size < endl;
fclose(fp);
cout < "讀取數據示例:" < 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 < "讀取內容:" < data < "t字節(jié)數:" < size < endl;
fclose(fp);
system("pause");
}
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。
舉報投訴
-
函數
+關注
關注
3文章
4340瀏覽量
62791 -
C++
+關注
關注
22文章
2113瀏覽量
73738 -
文件操作
+關注
關注
0文章
7瀏覽量
5356 -
頭文件
+關注
關注
0文章
25瀏覽量
9885
發(fā)布評論請先 登錄
相關推薦
MSP430之裸奔框架C++程序源碼(菜農C++裸奔大法系列之一) 轉載
/*------------------------------------------------------------------------MSP430之裸奔框架C++程序源碼(菜農C++裸奔大法)本程序主要表現了
發(fā)表于 02-01 11:06
在main文件中怎樣去使用C++呢
ESP32 之 ESP-IDF 學習筆記(五 - 2)【使用C++的工程】文章目錄ESP32 之 ESP-IDF 學習筆記(五 - 2)【使用C++的工程】1、導言2、在main
發(fā)表于 01-07 07:44
C++之操作符重載學習的總結
操作符重載是c++的強大特性之一;操作符重載的本質是通過函數擴展操作符的功能;operator 關鍵字是實現操作符重載的關鍵。
C++入門之表達式
C++中提供了很多操作符且定義了什么時候可以用于操作基本類型,其還允許我們定義用于操作class類型的操作符,接下來幾篇文章將會介紹
C++學習筆記之c++的基本認識
自這篇文章我們即將開始C++的奇幻之旅,其內容主要是讀C++ Primer的總結和筆記,有興趣可以找原版書看看,對于學習C++還是有很大幫助的。這篇文章將從一個經典的程序開始介紹C++
C++入門之通用算法
C++ 是一種強大的編程語言,它提供了許多通用算法,可以用于各種容器類型。這些算法是通過迭代器來操作容器中的元素,因此它們是通用的,可以用于不同類型的容器。在本篇博客中,我們將詳細介紹 C++ 的通用算法。
C++之父新作帶你勾勒現代C++地圖
為了幫助大家解決這些痛點問題,讓大家領略現代C++之美,掌握其中的精髓,更好地使用C++,C++之父Bjarne Stroustrup坐不住了,他親自操刀寫就了這本《
評論