C++ 读写TXT

1、 c++读txt

1.1、头文件

文件头:
#include <iostream>
#include <fstream>
#include <cassert>
#include <string>

 

//1 逐行读取
void readTxt(string file)
{
    ifstream infile; 
    infile.open(file.data());   //将文件流对象与文件连接起来 
    assert(infile.is_open());   //若失败,则输出错误消息,并终止程序运行 

    string s;
    while(getline(infile,s))
    {
        cout<<s<<endl;
    }
    infile.close();             //关闭文件输入流 
}

 

//2  逐个字符读入(忽略空格与回车)
void readTxt(string file)
{
    ifstream infile; 
    infile.open(file.data());   //将文件流对象与文件连接起来 
    assert(infile.is_open());   //若失败,则输出错误消息,并终止程序运行 

    char c;
    while (!infile.eof())
    {
        infile >> c;
        cout<<c<<endl;

    }
    infile.close();             //关闭文件输入流 
}

 

//3 逐个字符读入(包括空格与回车)
void readTxt(string file)
{
    ifstream infile; 
    infile.open(file.data());   //将文件流对象与文件连接起来 
    assert(infile.is_open());   //若失败,则输出错误消息,并终止程序运行 

    char c;
    infile >> noskipws;
    while (!infile.eof())
    {
        infile>>c;
        cout<<c<<endl;

    }
    infile.close();             //关闭文件输入流 
}

 

//noskipws介绍
//操作符noskipws会令输入运算符读取空白符,而不是跳过它们。为了恢复默认行为,可以使用skipws操作符。

cin>>noskipws;//设置cin读取空白符

while(cin>>ch)

cout<<ch;

cin>>skipws;//将cin恢复到默认状态,从而丢弃空白符

 

参考:c++读取TXT文件内容

2、c++写txt

一、文件的输入输出

1.fstream提供了三个类,用来实现c++对文件的操作。(文件的创建、读、写)。

ifstream 从已有的文件读入
ofstream向文件写内容
fstream打开文件供读写

2.文件打开模式:

ios::in            // 只读

ios::out           // 只写

ios::app           // 从文件末尾开始写,防止丢失文件中原来就有的内容

ios::binary        // 二进制模式

ios::nocreate      // 打开一个文件时,如果文件不存在,不创建文件

ios::noreplace     // 打开一个文件时,如果文件不存在,创建该文件

ios::trunc          //打开一个文件,然后清空内容

ios::ate           // 打开一个文件时,将位置移动到文件尾

3.文件指针位置的用法

ios::beg   //文件头

ios::end  // 文件尾

ios::cur  // 当前位置

例子:

file.seekg(0,ios::beg);   //让文件指针定位到文件开头 

file.seekg(0,ios::end);   //让文件指针定位到文件末尾 

file.seekg(10,ios::cur);   //让文件指针从当前位置向文件末方向移动10个字节 

file.seekg(-10,ios::cur);   //让文件指针从当前位置向文件开始方向移动10个字节 

file.seekg(10,ios::beg);   //让文件指针定位到离文件开头10个字节的位置

  写txt

需要注意的问题,content.c_str()是必须的,因为使用content会将string长度的内容输出,导致文件偏大,文件末尾有很多NULL。使用content.c_str()就不会有这个问题。

int savetxt(string filename, string content, bool boverride)
{
	ofstream out(filename, boverride ? ios::trunc : ios::app);
	if (out.is_open())
	{
		out << content.c_str() << endl;
		out.close();
	}
	return 0;
}

 

注意:移动的单位是字节,而不是行

例子:

#include <iostream>
#include <fstream>
#include<string>

const char * filetxt = result_name.c_str();
std::ofstream outfile(filetxt);
outfile << _result << "\n";
outfile.close();

读后写例子:

#include <stdlib.h>
#include <fstream>
#include <string>
#include <iostream>
 
int main(int argc, char* argv[])
{
    std::ifstream fIn("str.txt");
    std::ofstream fOut("str2.txt");
    if (!fIn)
    {
        std::cout << "Open input file faild." << std::endl;
    }
    if (!fOut)
    {
        std::cout << "Open output file faild." << std::endl;
    }
    std::string str;
    while (std::getline(fIn, str))
    {
        std::cout << str << std::endl;
        fOut << str << std::endl;
    }
    fIn.close();
    fOut.close();
    system("pause");
    return 0;
}

3、二进制文件

二进制文件(Binary files)

在二进制文件中,使用<< 和>>,以及函数(如getline)来操作符输入和输出数据,没有什么实际意义,虽然它们是符合语法的。

文件流包括两个为顺序读写数据特殊设计的成员函数:write 和 read。第一个函数 (write) 是ostream 的一个成员函数,都是被ofstream所继承。而read 是istream 的一个成员函数,被ifstream 所继承。类 fstream 的对象同时拥有这两个函数。它们的原型是:

write ( char * buffer, streamsize size );
read ( char * buffer, streamsize size );

这里 buffer 是一块内存的地址,用来存储或读出数据。参数size 是一个整数值,表示要从缓存(buffer)中读出或写入的字符数。

// reading binary file
#include <iostream>
#include <fstream>
using namespace std;

const char * filename = "test.txt";

int main() {
    char * buffer;
    long size;
    ifstream in(filename, ios::in | ios::binary | ios::ate);
    size = in.tellg();
    in.seekg(0, ios::beg);
    buffer = new char[size];
    in.read(buffer, size);
    in.close();
    for (int i = 0; i < size; i++)
    {
        if (buffer[i] != '\0')
            cout << buffer[i];
    }
    cout << endl;
    delete[] buffer;
    return 0;
}
/*
运行结果:
This is test!
My name is Mengmeng
*/

参考博客:C++文件操作详解(ifstream、ofstream、fstream)

C++文件读写详解(ofstream,ifstream,fstream)

 

 

 

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落花逐流水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值