Может ли PhysFS использовать ifstreams?
У меня проблема. У меня есть много кода, который использует ifstreams таким образом:
например:
bool AudioManager::_loadSounds( const std::string& path, const std::string& appendPath )
{
//open the file
std::ifstream ifs( path.c_str() );
//ensure it is open
if(!ifs.is_open())
{
return false;
}
std::string line;
//read each sound
while( getline( ifs, line ) )
{
...
Проблема в том, что мне нужно внести изменения в рамках всего приложения, чтобы использовать PhysFS. Все данные останутся структурированными в одном и том же каталоге, за исключением того, что они будут разделены на zip-файлы.
Есть ли простой способ применить PhysFS к ifstreams, чтобы мне не нужно было изменять все эти классы?
2 ответа
Нет простого способа сделать это. Независимо от того, что вам придется не использовать fstreams. Тем не менее, вы можете продолжать использовать потоки, просто написав std::streambuf
класс, извлекающий свои данные из PhysFS. Это не тривиальная вещь, так как streambuf
имеет различные биты сложности. Но это, безусловно, выполнимо.
Вы можете взять любой istream
класс получен и засуну другой streambuf
внутрь.
PhysFS - это библиотека C, которая не имеет понятия о типах C++. Вам нужно будет найти оболочку C++ или написать свою собственную, если вы хотите обрабатывать дескрипторы PhysFS как потоковые объекты.