У C++ є два основні способи роботи з файлами:
<fstream> — для читання та запису файлів<filesystem> (з C++17) — для роботи з папками, шляхами та перевіркою існування файлівБібліотека <fstream> надає три основні класи:
ifstream — читання з файлуofstream — запис у файлfstream — читання + запис#include <iostream>
#include <fstream>
int main() {
std::ofstream file("example.txt");
if (file.is_open()) {
file << "Привіт, світ!" << std::endl;
file.close();
}
return 0;
}
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::ifstream file("example.txt");
std::string line;
if (file.is_open()) {
while (std::getline(file, line)) {
std::cout << line << std::endl;
}
file.close();
}
return 0;
}
std::getline() читає файл пострічково.
| Режим | Опис |
|---|---|
ios::in |
читання |
ios::out |
запис |
ios::app |
додавання в кінець |
ios::binary |
бінарний режим |
ios::trunc |
очистити файл |
std::ofstream file("data.bin", std::ios::binary);
Починаючи зі стандарту C++17 з’явилась бібліотека std::filesystem.
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main() {
if (fs::exists("example.txt")) {
std::cout << "Файл існує" << std::endl;
}
}
fs::create_directory("test_folder");
fs::remove("example.txt");
auto size = fs::file_size("example.txt");
std::cout << "Розмір: " << size << " байт";
for (const auto& entry : fs::directory_iterator(".")) {
std::cout << entry.path() << std::endl;
}
Відносний шлях:
data/file.txt
Абсолютний шлях:
C:/Users/User/Documents/file.txt
std::cout << fs::current_path();
try {
fs::create_directory("test");
}
catch (fs::filesystem_error& e) {
std::cout << e.what();
}
| Для чого | Що використовувати |
|---|---|
| Читання/запис | <fstream> |
| Робота з папками | <filesystem> |
| Бінарні файли | ios::binary |
| Перевірка існування | fs::exists() |