国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - 帶你粗略了解C++流的讀寫文件

帶你粗略了解C++流的讀寫文件

2021-12-20 15:02_Space_ C/C++

這篇文章主要為大家總結了C++中輸入輸出流及文件流操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能給你帶來幫助

讀寫文本文件

C++的IO流:
IO:向設備輸入數據和輸出數據

設備有:
1)文件
2)控制臺
3)特定的數據類型(stringstream)
C++中,必須通過特定的已經定義好的類, 來處理IO(輸入輸出)

帶你粗略了解C++流的讀寫文件

C++的 IO類庫為:

帶你粗略了解C++流的讀寫文件

文件流:對文件進行讀寫操作
頭文件: < fstream >

ifstream 對文件輸入(讀文件)
ofstream 對文件輸出(寫文件)
fstream 對文件輸入或輸出

文件的打開方式:

模式標志 描述
ios::in 讀方式打開文件
ios:out 寫方式打開文件
ios::trunc 如果此文件已經存在, 就會打開文件之前把文件長度截斷為0
ios::app 尾部最加方式(在尾部寫入)
ios::ate 文件打開后, 定位到文件尾
ios::binary 二進制方式(默認是文本方式)

寫文本文件

#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main()
{
	string name;
	int age;
	ofstream outfile;  //也可以使用fstream, 但是fstream的默認打開方式不截斷文件長度
	// ofstream的默認打開方式是,  截斷式寫入 ios::out |  ios::trunc
	// fstream的默認打開方式是,  截斷式寫入   ios::out
	// 建議指定打開方式
	outfile.open("user.txt", ios::out | ios::trunc);
	while (1) {
		cout << "[ctrl+z退出]" << endl;
		cout << "請輸入姓名:";
		cin >> name;
		if (cin.eof()) { //判斷文件是否結束
			break;
		}
		outfile << name << "\t";
		cout << "請輸入年齡: ";
		cin >> age;
		outfile << age << endl;  //文本文件寫入
	}
	// 關閉打開的文件
	outfile.close();
	system("pause");
	return 0;
}

寫文本文件

#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main()
{
	string name;
	int age;
	ifstream infile;
	infile.open("user.txt");
	while (1) {
		infile >> name;
		if (infile.eof()) { //判斷文件是否結束
			break;
		}
		cout << name << "\t";
		infile >> age;
		cout << age << endl;  
	}
	// 關閉打開的文件
	infile.close();
	system("pause");
	return 0;
}

二進制讀寫文件

寫二進制文件
使用文件流對象的write方法寫入二進制數據.

注:若 ***outfile << age << end;***
寫入文件會轉換到文本方式寫入
需要使用write(寫)吧整形轉換到char類型,進行寫入

#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main()
{
	string name;
	int age;
	ofstream outfile;
	outfile.open("user.dat", ios::out | ios::trunc | ios::binary);
	while (1) {
		cout << "請輸入姓名: [ctrl+z退出] ";
		cin >> name;
		if (cin.eof()) { //判斷文件是否結束
			break;
		}
		outfile << name << "\t";
		cout << "請輸入年齡: ";
		cin >> age;  
		//outfile << age << endl;  //會自動轉成文本方式寫入
		outfile.write((char*)&age, sizeof(age));
	}
	// 關閉打開的文件
	outfile.close();
	system("pause");
	return 0;
}

二進制讀文件

需使用read(讀)吧寫入的內容讀取出來并輸出

#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main()
{
	string name;
	int age;
	ifstream infile;
	infile.open("user.dat", ios::in | ios::binary);
	while (1) {
		infile >> name;
		if (infile.eof()) { //判斷文件是否結束
			break;
		}
		cout << name << "\t";
		// 跳過中間的制表符
		char tmp;
		infile.read(&tmp, sizeof(tmp)); 
		//infile >> age; //從文本文件中讀取整數, 使用這個方式
		infile.read((char*)&age, sizeof(age));
		cout << age << endl;  //文本文件寫入
	}
	// 關閉打開的文件
	infile.close();
	system("pause");
	return 0;
}

按指定格式讀寫文件

指定格式寫文件:
使用 < stringstream>

#include <fstream>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
	string name;
	int age;
	ofstream outfile;
	outfile.open("user.txt", ios::out | ios::trunc);
	while (1) {
		cout << "[ctrl+z退出]" << endl;
		cout << "請輸入姓名: ";
		cin >> name;
		if (cin.eof()) { //判斷文件是否結束
			break;
		}
		cout << "請輸入年齡: ";
		cin >> age;
		stringstream s;
		s << "name:" << name << "\t\tage:" << age << endl;
		outfile << s.str();
	}
	// 關閉打開的文件
	outfile.close();
	system("pause");
	return 0;
}

指定格式讀文件:
在C++指定格式讀文件并沒有優雅的解決方案
就用C語言的: sscanf

#include <fstream>
#include <iostream>
#include <string>
#include <sstream>
#include <Windows.h>
using namespace std;
int main(void)
{
	char name[32];
	int age;
	string line;
	ifstream infile;
	infile.open("user.txt");
	while (1) {
		getline(infile, line);
		if (infile.eof()) { //判斷文件是否結束
			break;
		}
		sscanf_s(line.c_str(), "姓名:%s 年齡:%d", name, sizeof(name),&age);
		cout << "姓名:" << name << "\t\t年齡:" << age << endl;
	}
	infile.close();
	system("pause");
	return 0;
}

文件流的狀態檢查

描述
is_open() 文件流是否打開成功
eof() 流是否結束
fail() 流的failbit或者badbit被置位時, 返回true
failbit: 出現非致命錯誤,可挽回, 一般是軟件錯誤 badbit:置位, 出現致命錯誤, 一般是硬件錯誤或系統底層錯誤, 不可挽回
bad() 流的badbit置位時, 返回true
good() 流處于有效狀態時, 返回true
clear() 流的所有狀態都被復位

文件流的三種定位 seekg tellg seekp

seekg:

seekg( off_type offset, //偏移量
ios::seekdir origin ); //起始位置
作用:設置輸入流的位置
參數1: 偏移量
參數2: 相對位置
beg 相對于開始位置
cur 相對于當前位置
end 相對于結束位置

獲取文件的最后50個字符:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(void) {
	ifstream infile;
	infile.open(/*文件名字這里我就不寫了*/".cpp");
	if (!infile.is_open()) {
		return 1;
	}
		//定位到最后50個字母
	infile.seekg(-50, infile.end);
	while (!infile.eof()) {
		string line;
		getline(infile, line);
		cout << line << endl;
	}
	infile.close();
	system("pause");
	return 0;
}

tellg:

返回該輸入流的當前位置(距離文件的起始位置的偏移量)

獲取文件的長度:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(void) {
	ifstream infile;
	infile.open(/*文件名字這里我就不寫了*/".cpp");
	if (!infile.is_open()) {
		return 1;
	}
	// 先把文件指針移動到文件尾
	infile.seekg(0, infile.end);
	int len = infile.tellg();
	cout << "len:" << len;
	infile.close();
	system("pause");
	return 0;
}

seekp

設置該輸出流的位置

先向新文件寫入:“123456789”

然后再在第4個字符位置寫入"ABC"

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(void) {
	ofstream outfile;
	outfile.open("test.txt");
	if (!outfile.is_open()) {
		return 1;
	}
	outfile << "123456789";
	outfile.seekp(4, outfile.beg);
	outfile << "ABC";
	outfile.close();
	system("pause");
	return 0;
}

常見的錯誤

1.文件沒有關閉, close(),可能導致寫文件失敗
2.文件打開方式不合適
3.在VS2015的部分版本中,當sscanf和sscanf_s的格式字符串中含有中文時,可能會讀取失敗。

 

總結

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!

原文鏈接:https://blog.csdn.net/qq_45140193/article/details/119789181

延伸 · 閱讀

精彩推薦
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
主站蜘蛛池模板: 精品视频一区二区 | 老熟妇午夜毛片一区二区三区 | 亚洲精品福利 | 欧美福利视频 | 97国产精品视频 | 中文字幕精品一区二区精品 | 国产成人在线一区 | 色视频www在线播放国产人成 | 久久天天躁狠狠躁夜夜躁2014 | 国产精品久久久久久久久软件 | 免费国产一区 | 日韩欧美一区二区三区免费观看 | 嫩呦国产一区二区三区av | 久久美女 | 中文字幕乱码亚洲精品一区 | 久热免费在线视频 | 在线一级片 | 日本久久精品 | 日韩高清在线一区 | 一 级 黄 色 片免费网站 | 精品视频网站 | 国产成人精品久久二区二区 | 国产黄色成人 | 国产精品99久久久久久久女警 | 一级毛片免费看 | 国产黄a一级 | 成版人性视频 | 中文字幕欧美激情 | 精品久久一区 | 国产一级黄色av | 中国久久久 | 免费观看www7722午夜电影 | 青青草久 | 日韩一区二区在线观看 | 91嫩草香蕉 | 51ⅴ精品国产91久久久久久 | 日本免费在线一区 | 蜜桃精品在线观看 | 中文字幕精品一区二区精品绿巨人 | 黄网站色| 美女久久|