Информация об изменениях

Сообщение Re: Как в одну строку кода прочитать содержимое файла в масс от 05.01.2024 19:47

Изменено 05.01.2024 19:54 rg45

Re: Как в одну строку кода прочитать содержимое файла в массив?
Здравствуйте, Kluev, Вы писали:

K>есть ли в std аналог File.ReadAllBytes()?


Тут нашлись такие, кто докопался до низкой эффективности. Ну так вот, если важно быстродействие, то можно использовать чуть более длинную версию — аж целых 4 строчки

std::vector<uint8_t> read_all_bytes(const std::string& path)
{
   std::basic_ifstream<uint8_t> input(path.c_str(), std::ios_base::binary);
   std::vector<uint8_t> bytes(std::filesystem::file_size(path));
   input.read(bytes.data(), bytes.size());
   return bytes;
}
Re: Как в одну строку кода прочитать содержимое файла в масс
Здравствуйте, Kluev, Вы писали:

K>есть ли в std аналог File.ReadAllBytes()?


Тут нашлись такие, кто докопался до низкой эффективности. Ну так вот, если важно быстродействие, то можно использовать чуть более длинную версию — аж целых 4 строчки

std::vector<uint8_t> read_all_bytes(const std::string& path)
{
   std::basic_ifstream<uint8_t> input(path.c_str(), std::ios_base::binary);
   std::vector<uint8_t> bytes(std::filesystem::file_size(path));
   input.read(bytes.data(), bytes.size());
   return bytes;
}


Ну а оптимизированная версия save_all_bytes все так же в две строчки и даже чуть меньше букв:

void save_all_bytes(const std::vector<uint8_t>& bytes, const std::string& path)
{
   std::basic_ofstream<uint8_t> output(path.c_str(), std::ios_base::binary);
   output.write(bytes.data(), bytes.size());
}