Работа с файлами в C++
С файлом (file) связано множество действий в программировании, так как этот термин может означать разные вещи в разных контекстах. Рассмотрим некоторые из них:
1. Файл как поток информации. Файл может рассматриваться как поток информации, который можно читать и записывать. Для работы с потоком информации в языке C используются функции из библиотеки
#include
int main() {
FILE *f = fopen("file.txt", "w"); // открыть файл для записи
fprintf(f, "Hello, world!\n"); // записать строку в файл
fclose(f); // закрыть файл
return 0;
}
2. Файл как хранилище данных. Файл также может рассматриваться как хранилище данных в структурированном формате, например, в формате CSV, XML, JSON и т.д. Для работы с файлами в таком формате можно использовать специальные библиотеки, например, библиотеку libcsv для чтения и записи CSV-файлов. Например:
#include
int main() {
FILE *f = fopen("data.csv", "r"); // открыть файл для чтения
csv_parser parser;
csv_init(&parser, 0); // инициализировать парсер
csv_set_delim(&parser, ','); // установить разделитель поля
csv_set_file(&parser, f); // установить файл для чтения
int rows = 0, cols = 0;
char **data = NULL;
csv_parse(&parser, &data, &rows, &cols); // разобрать файл
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%s\t", data[i * cols + j]); // вывести содержимое файла
}
printf("\n");
}
csv_free(&parser); // освободить ресурсы парсера
fclose(f); // закрыть файл
return 0;
}
3. Файл как исходный код программы. Файл также может представлять собой исходный код программы на языке C. Для компиляции исходного кода в исполняемый файл используется компилятор, например, gcc. Например:
// file.c
#include
int main() {
printf("Hello, world!\n"); // вывести строку на экран
return 0;
}
Компиляция исходного кода в исполняемый файл:
$ gcc -o file file.c
Запуск исполняемого файла:
$ ./file
Hello, world!
4. Файл как конфигурационный файл. Файл также может использоваться в качестве конфигурационного файла, в котором хранятся параметры настройки программы. Для работы с конфигурационным файлом обычно используется парсер, например, библиотека libconfig. Например:
#include
int main() {
config_t cfg;
config_init(&cfg); // инициализировать парсер
if (!config_read_file(&cfg, "config.cfg")) { // прочитать файл
config_destroy(&cfg); // освободить ресурсы парсера
return 1;
}
int num;
if (!config_lookup_int(&cfg, "num", &num)) { // найти значение параметра
config_destroy(&cfg); // освободить ресурсы парсера
return 1;
}
printf("num = %d\n", num);
config_destroy(&cfg); // освободить ресурсы парсера
return 0;
}
Конфигурационный файл:
num = 123