Как отменить загрузку/выгрузку файлов в клиентских библиотеках C++ для облачных служб Google

Я использую Google облачную библиотеку cpp для загрузки/выгрузки файла с помощью UploadFile и DownloadToFile соответственно.

Как можно отменить передачу файла из другого потока?

Заранее спасибо!


person Aleksandr Tsumel    schedule 14.04.2020    source источник
comment
Короткий ответ: это невозможно. Я нашел этот пост с аналогичным вопросом. Суть одинакова для всех клиентских библиотек. Невозможно остановить загрузку в GCS через любые клиентские библиотеки. Дополнительную информацию вы найдете в посте выше. Я также прикрепляю этот сообщение, где объясняется согласованность загрузок в GCS. Я надеюсь, что это помогает.   -  person Christopher Rodriguez Conde    schedule 15.04.2020


Ответы (1)


Нет способа (в настоящее время) отменить текущую загрузку. Но вы можете написать что-то вроде этого, что легко отменить:

void MyDownload(
    gcs::Client client, std::string bucket_name, std::string object_name,
    std::string filename, bool& canceled) {
  auto reader = client.ReadObject(bucket_name, object_name);
  auto writer = std::ofstream(filename);
  std::vector<char> buffer(4 * 1024 * 1024L);
  do {
    if (canceled) return; // TODO - not thread safe
    reader.read(buffer.data(), buffer.size());
    writer.write(buffer.data(), reader.gcount());
  } while(not reader.eof() and reader.good() and writer.good());
}
person coryan    schedule 15.04.2020