文件读写操作C/C++

C语言文件读写操作

标准I/O库函数:fopen()、fwrite()、fread()、fclose()函数详解:

fopen()、fwrite()、fread()、fclose()函数都属于标准I/O库函数,调用这些函数需要包含头文件#include<stdio.h>,这些函数都是构建于文件I/O系统调用之上的,如:open()、write()、lseek()

fopen()函数:打开文件:

  • 函数原型:FILE* fopen(const char* path, const char* mode);
  • 函数参数:path:文件路径(绝对路径/相对路径);mode:文件的读写权限,是一个字符串;
  • 返回值:调用成功返回一个FILE类型的对象指针,该指针与打开或创建的文件相关联;如果调用失败则返回NULL,并设置errno以指示错误原因。

常用参数mode的取值范围:

mode

说明

r

以只读的方式打开文件

r+

以可读、可写的方式打开文件

w

以只写的方式打开文件,如果path指定的文件存在,则将文件长度截断为0;

如果path指定的文件不存在,则创建该文件

w+

以可读写的方式打开文件,如果path指定的文件存在,则将文件长度截断为0;

如果path指定的文件不存在,则创建该文件

a

以只写的方式打开文件,打开后已进行追加内容(在文件末尾写入),如果文件不存在则创建该文件

a+

以可读写的方式打开文件,以追加的方式写入(在文件末尾),如果文件不存在则创建该文件

b

以二进制的方式打开文件

fwrite()函数:写入文件:

  • 函数原型:size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream);
  • 函数参数:ptr:待写入数据的缓冲区;size:每个数据项的字节大小,与fread()函数的size参数意义相同;nmemb:写入的数据项个数,与fread()函数的nmemb参数意义相同;stream:打开的文件指针(FILE*类型)。
  • 返回值:成功时,返回写入的数据项的数目(数据项的数目不等于实际写入的字节数,除非参数size等于1);错误时,返回值小于参数nmemb(或等于0

fread()函数:读取文件:

  • 函数原型:size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream);
  • 函数参数:ptr:存放读取数据的缓冲区;size:每个数据项的字节大小;nmemb:参数nmemb指定了读取数据项的个数;stream:打开的文件指针(FILE*类型)。
  • 返回值:成功时,返回读取到的数据项的数目(数据项的数目不等于实际读取的字节数,除非参数size等于1);错误或到达文件末尾时,返回值将小于参数nmemb注意:fread()函数不能区分文件结尾好错误,需要使用ferror()或feof()函数来进行判断

fclose()函数:关闭文件:

  • 函数原型:int fclose(FILE* stream);
  • 函数参数:stream:FILE类型指针,指向打开的文件。
  • 返回值:成功返回0;失败返回EOF(即-1),并设置errno以指示错误原因。

popen()函数和fgets()函数

popen()函数:

用于创建一个子进程,并通过管道与该子进程进行通信

  • 函数原型:FILE* popen(const char* command, const char* mode);
  • 函数参数:command:一个字符串,表示要在子进程中执行的命令;mode:一个字符串,指定文件流的模式,可以是“r”或“w”。
  • 返回值:popen函数会返回一个文件指针,通过该指针可以读取或写入与子进程相关联的管道。

fgets()函数:

用于从文件流中读取一行数据

  • 函数原型:char* fgets(char* str, int size, FILE* stream);
  • 函数参数:str:一个指向字符数组的指针,用于存储读取的字符串;size:最大读取字符数;
  • stream:文件流指针,表示从哪个流中读取数据。
  • 返回值:该函数每次读取一行字符,遇到换行符‘\n’或者读取字符已经达到最大长度size(包括换行符和末尾的‘\0’)时会停止读取,返回读取到的字符串指针,如果读取失败或者到达文件结尾则返回NULL。

C++文件读写操作

在C++中,ifstream和ofstream是用于文件输入和输出操作的类,分别代表输入文件流和输出文件流。详细使用说明如下:

ifstream(输入文件流)代码示例

#include <iostream>
#include <fstream>

int main() 
{
    // 打开文件
    std::ifstream inputFile("input.txt");
    // 检查文件是否成功打开
    if (!inputFile.is_open()) 
   {
        std::cerr << "无法打开文件" << std::endl;
        return 1;
    }

    // 读取文件内容
    std::string line;
    while (std::getline(inputFile, line)) 
   {
        std::cout << line << std::endl;
    }

    // 关闭文件
    inputFile.close();
    return 0;
}

ofstream(输出文件流)代码示例

#include <iostream>
#include <fstream>

int main() 
{
    // 打开文件
    std::ofstream outputFile("output.txt");
    // 检查文件是否成功打开
    if (!outputFile.is_open()) 
   {
        std::cerr << "无法打开文件" << std::endl;
        return 1;
    }

    // 写入数据到文件
    outputFile << "Hello, World!" << std::endl;
    outputFile << "这是一个示例文件写入操作。" << std::endl;
    // 关闭文件
    outputFile.close();
    return 0;
}

C语言代码示例

char data[20] = {'0'};
FILE* fp = nullptr;
fp = popen("date +'%Y-%m-%d %H:%M:%S'", "r");
if(nullptr != fp)
{
    if(fgets(data, sizeof(data), fp) != nullptr)
    {
        js_data["time"] = data;
    }
    else
    {
        js_data["time"] = "";
        return;
    }
}
else
{
    js_data["time"] = "";
    return;
}
pclose(fp);
  • 29
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

倔强de番茄

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

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

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

打赏作者

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

抵扣说明:

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

余额充值