Как вывести несколько строк с помощью asio::stream_file::async_write_some?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как вывести несколько строк с помощью asio::stream_file::async_write_some?

Сообщение Anonymous »

Существует перегрузка функции asio::stream_file::async_write_some, которая принимает последовательность буферов. Но в моем случае (см. код ниже) он выводит только содержимое первого буфера, и я сейчас не могу понять, что делаю не так. Конечно, можно написать код, который выводит первый буфер, и регистрировать обратный вызов, который выводит второй буфер (и регистрировать обратный вызов, который выводит третий буфер и так далее). Но я надеюсь, что есть более простое решение?

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

#include 
#include 
#include 

#include 
#include 

namespace asio = boost::asio;

...

const std::vector lines{
"first line\n",
"second line\n",
"third line\n"
};
std::vector buffers;
buffers.reserve(lines.size());
for (const auto& line : lines) {
buffers.push_back(asio::buffer(line.data(), line.size()));
}

asio::io_context ctx;
const char* output_path = R"(C:\Users\MyUsername\workspace\temp\lines.txt)";
asio::stream_file stream(ctx);
stream.open(
output_path,
asio::stream_file::write_only|asio::stream_file::create
);
stream.async_write_some(
buffers,
[](boost::system::error_code e, size_t n) {
if (e != boost::system::errc::success) {
std::cerr 

Подробнее здесь: [url]https://stackoverflow.com/questions/79282269/how-to-output-multiple-lines-using-asiostream-fileasync-write-some[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»