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

У меня есть интерфейс, который читает файлы нескольких типов. Интерфейс имеет read а также open методы (и еще немного). open получает имя файла (const char*) и открывает файл для чтения. В настоящее время я поддерживаю два типа файлов: pcap и raw binary. Недавно я обнаружил, что все файлы, которые я предполагаю прочитать, на самом деле заархивированы (в формате gzip), но все остальное остается прежним (после распаковки файлов все работает как задумано). Я хотел бы добавить к возможности распаковки метода open, чтобы сначала файл был разархивирован (в памяти, без записи разархивированного содержимого на диск) и передал разархивированный контент фактическим реализациям. Основная проблема заключается в том, что open реализация ожидает имя файла, в случае pcap open вызовы реализации pcap_open_offline который не получает поток или буфер. В идеале я мог бы создать какой-то файл (канал, ссылку или что-то еще) и связать его с содержимым, извлеченным из архива. Есть идеи, как мне это сделать? вот небольшой код, чтобы было легче понять, что я делаю

class FileReader //interface
{
public:
 void open(const char* name)
 {
  // unzip file here
  open_impl(name);
 }
 virtual size_t read() = 0;
protected:
 virtual void open_impl(const char* name) = 0;
};

class PcapReader: public FileReader
{
public:
 size_t read() {...}
protected:
 virtual void open_impl(const char* name)
 {
   pcap_open_offline(name, error_buffer);
 }
 char error_buffer[1024];
};

0 ответов

Другие вопросы по тегам