C/C++文件读取操作

简介: C/C++文件读取操作

问题描述:

给程序目录下a.txt文件写入2行hello world,第三行写入1-9的数字并用空格隔开,最后读取其中的内容输出,创建b.txt文件并赋值a.txt的文件到b.txt文件中,最后删除a.txt文件


C语言实现方法:

文件操作方法

提供的操作函数

fopen()      打开流
    fclose()     关闭流
    fputc()      写一个字符到流中
    fgetc()      从流中读一个字符
    fseek()      在流中定位到指定的字符
    fputs()      写字符串到流
    fgets()      从流中读一行或指定个字符
    fprintf()    按格式输出到流
    fscanf()     从流中按格式读取
    remove()   删除文件
    feof()    文件尾判断

文件打开模式

r           以只读方式打开文件,只允许读取,不允许写入,文件必须存在
  r+          以读/写方式打开文件,允许读取和写入。该文件必须存在。
  rb+         以读/写方式打开一个二进制文件,允许读/写数据。
  rt+         以读/写方式打开一个文本文件,允许读和写。
  w           以只写方式打开文件,若文件存在则长度清为0,即该文件内容消失,若不存在则创建该文件。
  w+          以读/写方式打开文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
  a           以追加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留(EOF符保留)。
  a+          以追加方式打开可读/写的文件。若文件不存在,则会建立该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(原来的EOF符 不保留)。
  wb          以只写方式打开或新建一个二进制文件,只允许写数据。
  wb+         以读/写方式打开或建立一个二进制文件,允许读和写。
  wt+         以读/写方式打开或建立一个文本文件,允许读写。
  at+         以读/写方式打开一个文本文件,允许读或在文本末追加数据。
  ab+         以读/写方式打开一个二进制文件,允许读或在文件末追加数据。

代码实现

#include <stdio.h>
int main(int argc, char **argv)
{
    // 定义文件指针并通过读写方式打开a.txt文件
    FILE *wfile;
    char _str[] = "hello world\r\n";
    if ((wfile = fopen("a.txt", "wb")) == NULL)
    {
        printf("file open error a.txt\n");
        return 0;
    }
    // 写字符串到流 "hello world"
    fputs(_str, wfile);
    // 格式化方式写入"hello world"
    fprintf(wfile, "%s", _str);
    // 单个字符写入 1 - 10
    for (int i = 1; i <= 10; i++)
    {
        fputc(i + 47, wfile);
        fputc(' ', wfile);
    }
    // 关闭文件 释放文件指针
    fclose(wfile);
    // 文件读取
    FILE *ofile;
    if ((ofile = fopen("a.txt", "r")) == NULL)
    {
        printf("file open error a.txt\n");
        return 0;
    }
    // 向控制台打印文件
    char buff[1024];
    while (!feof(ofile))
    {
        fgets(buff, sizeof(buff), ofile);
        printf("%s", buff);
    }
    fclose(ofile);
    // 把a.txt的内容写入到b.txt
    FILE *afile;
    if ((afile = fopen("a.txt", "r")) == NULL)
    {
        printf("file open error a.txt\n");
        return 0;
    }
    // 创建b文件
    FILE *bfile;
    if ((bfile = fopen("b.txt", "wt+")) == NULL)
    {
        printf("file open error b.txt\n");
        return 0;
    }
    while (!feof(afile))
    {
        fgets(buff, sizeof(buff), afile);
        fputs(buff, bfile);
    }
    fclose(afile);
    fclose(bfile);
    // 删除a文件
    remove("a.txt");
    return 0;
}

C++实现方法:

文件操作方法

fstream    --提供了三个类,用来实现c++对文件的操作(文件的创建、读、写)
     ifstream   -- 从已有的文件读入
     ofstream  -- 向文件写内容
     fstream    -- 打开文件供读写
good()   如果文件打开成功
    bad()   打开文件时发生错误
    eof()    到达文件尾
    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个字节的位置

文件打开模式

ios::in                    只读
   ios::out                 只写
   ios::app                从文件末尾开始写,防止丢失文件中原来就有的内容
   ios::binary           二进制模式
   ios::trunc             打开一个文件,然后清空内容
   ios::ate                 打开一个文件时,将位置移动到文件尾

代码实现

#include <iostream>
#include <fstream> //读取文件的头文件
#include <string>
using namespace std;
int main(void)
{
    char _str[] = "hello world";
    // 打开a.txt文件
    fstream afile("a.txt", ios::out);
    if (!afile.is_open())
    {
        cout << "打开文件失败" << endl;
        return 0;
    }
    // 写入数据
    afile << _str;
    afile << endl;
    afile << _str;
    afile << endl;
    for (int i = 1; i <= 10; i++)
    {
        afile << i << " ";
    }
    // 关闭文件
    afile.close();
    // 创建b.txt文件
    fstream bfile("b.txt", ios::out);
    if (!bfile.is_open())
    {
        cout << "打开文件失败" << endl;
        return 0;
    }
    // 打开a.txt文件
    fstream file("a.txt", ios::in);
    if (!file.is_open())
    {
        cout << "打开文件失败" << endl;
        return 0;
    }
    char buff;
    while (file.get(buff))
    {
        // 写入到b.txt文件
        bfile.put(buff);
        // 输出到控制台
        cout << buff;
    }
    //关闭文件
    bfile.close();
    file.close();
    // 删除a.txt文件
    remove("a.txt");
    return 0;
}


相关文章
|
7月前
|
Linux 编译器 C++
C/C++性能优化:从根本上消除拷贝操作的浪费
C/C++性能优化:从根本上消除拷贝操作的浪费
943 1
|
7月前
|
人工智能 机器人 C++
【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)
【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)
159 0
|
5月前
|
C++ 容器
C++中向量的操作vector
C++中向量的操作vector
|
6月前
|
算法 前端开发 Linux
【常用技巧】C++ STL容器操作:6种常用场景算法
STL在Linux C++中使用的非常普遍,掌握并合适的使用各种容器至关重要!
96 10
|
6月前
|
C++ iOS开发 开发者
C++一分钟之-文件输入输出(I/O)操作
【6月更文挑战第24天】C++的文件I/O涉及`ifstream`, `ofstream`和`fstream`类,用于读写操作。常见问题包括未检查文件打开状态、忘记关闭文件、写入模式覆盖文件及字符编码不匹配。避免这些问题的方法有:检查`is_open()`、显式关闭文件或使用RAII、选择适当打开模式(如追加`ios::app`)以及处理字符编码。示例代码展示了读文件和追加写入文件的实践。理解这些要点能帮助编写更健壮的代码。
74 2
|
6月前
|
C++
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
|
7月前
|
C++
在C和C++中,指针的算术操作
在C和C++中,指针的算术操作
|
6月前
|
算法 C++ 容器
C++之vector容器操作(构造、赋值、扩容、插入、删除、交换、预留空间、遍历)
C++之vector容器操作(构造、赋值、扩容、插入、删除、交换、预留空间、遍历)
291 0
|
7月前
|
存储 安全 算法
【C++入门到精通】 原子性操作库(atomic) C++11 [ C++入门 ]
【C++入门到精通】 原子性操作库(atomic) C++11 [ C++入门 ]
197 1
|
6月前
|
算法 Java API
在VC++中使用CxImage库读写图像实现像素操作
在VC++中使用CxImage库读写图像实现像素操作
51 0