c++ 实时 读写 大文件代码
时间: 2024-09-11 21:10:57 浏览: 47
读写INI文件的源代码
在C++中,实时高效地读写大文件通常涉及到内存映射和流式操作。这里是一个简单的示例,说明如何使用`std::fstream`和`std::memmap_file`来处理大文件:
```cpp
#include <iostream>
#include <fstream>
#include <sys/mman.h> // 如果是Linux系统
// 定义缓冲区大小(可以根据需要调整)
const size_t BUFFER_SIZE = 4096;
// 使用内存映射文件函数
void *map_file(const char *filename, std::size_t length) {
void *addr;
if (fcntl(fileno((FILE *)filename), F_SETFL, O_RDWR | O_DIRECT) == -1) {
perror("fcntl failed");
return nullptr;
}
addr = mmap(nullptr, length, PROT_READ | PROT_WRITE, MAP_SHARED, fileno((FILE *)filename), 0);
if (addr == MAP_FAILED) {
perror("mmap failed");
return nullptr;
}
return addr;
}
// 写入数据
void write_to_file(void *data, const size_t length) {
std::ofstream file_out("largefile.txt", std::ios::binary | std::ios::out);
if (!file_out.is_open()) {
perror("Could not open file for writing");
return;
}
file_out.write(reinterpret_cast<char*>(data), length);
file_out.close();
}
// 从文件读取数据
void read_from_file(void *data, const size_t length) {
std::ifstream file_in("largefile.txt", std::ios::binary | std::ios::in);
if (!file_in.is_open()) {
perror("Could not open file for reading");
return;
}
file_in.read(reinterpret_cast<char*>(data), length);
file_in.close();
}
int main() {
try {
std::string filepath = "your_large_file.txt";
// 映射文件到内存
void *mapped_data = map_file(filepath.c_str(), BUFFER_SIZE); // 使用缓冲区大小为BUFFER_SIZE
// 如果映射成功,可以进行读写操作
if (mapped_data) {
// 写入数据
write_to_file(mapped_data, BUFFER_SIZE);
// 读取数据
read_from_file(mapped_data, BUFFER_SIZE);
// 解析并释放内存
munmap(mapped_data, BUFFER_SIZE);
} else {
std::cerr << "Memory mapping failed." << std::endl;
}
} catch (const std::exception &e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
```
阅读全文