«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как читать байты файла в массив символов на C++ без getline()?

Как читать байты файла в массив символов на C++ без getline()?

Опубликовано 8 ноября 2024 г.
Просматривать:762

How to Read File Bytes into a Char Array in C   Without getline()?

Как получить байты файла в массив символов в C

Чтобы прочитать байты файла в массив символов без использования getline(), рассмотрим используя ifstream::read(). Выполните следующие действия:

  1. Откройте файл:

    std::ifstream infile("C:\\MyFile.csv");
  2. Получить длину файла:

    infile.seekg(0, std::ios::end);
    size_t length = infile.tellg();
    infile.seekg(0, std::ios::beg);
  3. Убедитесь в размере буфера:

    if (length > sizeof (buffer)) {
     length = sizeof (buffer);
    }
  4. Прочитать файл:

    infile.read(buffer, length);

Дополнительные примечания:

  • Для точной обработки байтов рекомендуется открывать файл в двоичном режиме (например, с помощью std::ios_base::binary).
  • Хотя функции seekg() и Tellg() в целом надежны, в некоторых случаях они не всегда могут обеспечить точный размер файла.
  • Для чтения всего файла за одну операцию и обработки больших файлов используйте std::vector и std::istreambuf_iterator могут обеспечить большую гибкость.

Обновленный подход (2019):

Чтобы учесть потенциальные ошибки во время чтения, рассмотрите следующий подход:

size_t chars_read;

if (!(infile.read(buffer, sizeof(buffer)))) {
    if (!infile.eof()) {
        // Handle error during reading
    }
}

chars_read = infile.gcount(); // Get actual number of bytes read
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3