чтение файла

Ответить
ya
^-^
Сообщения: 2535
Зарегистрирован: 16 дек 2021, 19:56

чтение файла

Сообщение ya »

построчное чтение содержимого файла

Код: Выделить всё

#include <fstream>
#include <string>

std::string readFile(const std::string& filename)
{
    std::ifstream file(filename);
    std::string content;
    if (file.is_open()) {
        std::string line;
        while (std::getline(file, line)) {
            content += line + "\n"; // добавляем каждую строку с переводом строки
        }
        file.close();
    }
    return content;
}
ya
^-^
Сообщения: 2535
Зарегистрирован: 16 дек 2021, 19:56

Re: чтение файла

Сообщение ya »

Чтобы прочитать бинарный файл в переменную типа std::string, можно использовать следующий подход:

Открыть файл в бинарном режиме (std::ios::binary).
Переместить указатель чтения в конец файла (seekg), чтобы определить его размер.
Зарезервировать место в std::string.
Вернуться в начало файла (seekg), считать все байты в строку.

Код: Выделить всё

#include <fstream>
#include <string>

std::string readBinaryFile(const std::string& filename)
{
    // Открываем файл в бинарном режиме
    std::ifstream file(filename, std::ios::binary);
    if (!file) {
        // Обработка ошибки: можно вернуть пустую строку или выбросить исключение
        return "";
    }

    // Перемещаемся в конец файла, чтобы узнать его размер
    file.seekg(0, std::ios::end);
    std::size_t size = file.tellg();

    // Создаем строку достаточного размера
    std::string buffer(size, '\0');

    // Возвращаемся в начало файла
    file.seekg(0, std::ios::beg);

    // Читаем весь файл в строку
    file.read(&buffer[0], size);

    return buffer;
}
использование

Код: Выделить всё

std::string binaryData = readBinaryFile("path/to/binary/file");
ya
^-^
Сообщения: 2535
Зарегистрирован: 16 дек 2021, 19:56

Re: чтение файла

Сообщение ya »

чтение текстового файла и чтение бинарного файла

Этот класс предложит два публичных метода:

readTextFile(const std::string& filename) — для чтения текстового файла в std::string.
readBinaryFile(const std::string& filename) — для чтения бинарного файла в std::string.

Код: Выделить всё

#include <fstream>
#include <string>
#include <stdexcept>

class FileReader {
public:
    // Чтение текстового файла
    std::string readTextFile(const std::string& filename) {
        std::ifstream file(filename);
        if (!file) {
            throw std::runtime_error("Не удалось открыть файл: " + filename);
        }

        std::string content;
        std::string line;
        while (std::getline(file, line)) {
            content += line + "\n";
        }
        return content;
    }

    // Чтение бинарного файла
    std::string readBinaryFile(const std::string& filename) {
        std::ifstream file(filename, std::ios::binary);
        if (!file) {
            throw std::runtime_error("Не удалось открыть файл: " + filename);
        }

        // Определение размера файла
        file.seekg(0, std::ios::end);
        std::size_t size = file.tellg();
        file.seekg(0, std::ios::beg);

        // Чтение файла в строку
        std::string buffer(size, '\0');
        file.read(&buffer[0], size);

        return buffer;
    }
};
использование

Код: Выделить всё

int main() {
    FileReader fr;

    try {
        // Чтение текстового файла
        std::string textData = fr.readTextFile("textfile.txt");
        // Обработка textData...

        // Чтение бинарного файла
        std::string binData = fr.readBinaryFile("binaryfile.bin");
        // Обработка binData...

    } catch (const std::exception& ex) {
        std::cerr << "Ошибка: " << ex.what() << std::endl;
    }

    return 0;
}
ya
^-^
Сообщения: 2535
Зарегистрирован: 16 дек 2021, 19:56

Re: чтение файла

Сообщение ya »

запись в файл

Код: Выделить всё

#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::ofstream outfile("output.txt");
    if (!outfile) {
        std::cerr << "Не удалось открыть файл для записи.\n";
        return 1;
    }

    // Правильный способ:
    outfile << "Первая строка\n";
    outfile << "Вторая строка\n";
    
    outfile.close(); // Важно! Закрываем файл, чтобы записать содержимое.

    return 0;
}
Ответить