linux

C++ Linux下文件操作有哪些方法

小樊
59
2025-07-24 05:49:15
栏目: 编程语言

在Linux下,C++可以使用多种方法进行文件操作。以下是一些常用的方法:

  1. C++ I/O库:C++提供了iostream库,可以用于基本的文件输入输出操作。例如:
#include <iostream>
#include <fstream>

int main() {
    std::ifstream infile("input.txt");
    std::ofstream outfile("output.txt");

    int num;
    while (infile >> num) {
        outfile << num * 2 << std::endl;
    }

    infile.close();
    outfile.close();

    return 0;
}
  1. C I/O库:C++也支持C语言的I/O库,如stdio.h。例如:
#include <cstdio>

int main() {
    FILE *infile = fopen("input.txt", "r");
    FILE *outfile = fopen("output.txt", "w");

    int num;
    while (fscanf(infile, "%d", &num) != EOF) {
        fprintf(outfile, "%d\n", num * 2);
    }

    fclose(infile);
    fclose(outfile);

    return 0;
}
  1. POSIX文件I/O:POSIX标准提供了一套跨平台的文件操作函数,如open(), read(), write(), close()等。例如:
#include <iostream>
#include <fcntl.h>
#include <unistd.h>

int main() {
    int infile = open("input.txt", O_RDONLY);
    int outfile = open("output.txt", O_WRONLY | O_CREAT, 0644);

    char buffer[1024];
    ssize_t bytes_read;
    while ((bytes_read = read(infile, buffer, sizeof(buffer))) > 0) {
        write(outfile, buffer, bytes_read);
    }

    close(infile);
    close(outfile);

    return 0;
}
  1. Boost.Asio:Boost库提供了一个跨平台的异步I/O库,可以用于高性能的文件操作。例如:
#include <boost/asio.hpp>
#include <iostream>

int main() {
    boost::asio::io_context io_context;

    boost::asio::posix::stream_descriptor infile(io_context, open("input.txt", O_RDONLY));
    boost::asio::posix::stream_descriptor outfile(io_context, open("output.txt", O_WRONLY | O_CREAT, 0644));

    char buffer[1024];
    std::size_t bytes_transferred;
    while (boost::asio::read(infile, boost::asio::buffer(buffer), boost::asio::transfer_all()) > 0) {
        boost::asio::write(outfile, boost::asio::buffer(buffer, bytes_transferred));
    }

    return 0;
}

这些方法可以根据需要选择使用。对于简单的文件操作,C++ I/O库和C I/O库通常足够使用。如果需要更高的性能或者跨平台支持,可以考虑使用POSIX文件I/O或Boost.Asio。

0
看了该问题的人还看了