ich brauche in meinem Programm die möglichkeit Dateien aus einer ZIP-Datei zu extrahieren. Der Inhalt der ZIP-Datei sollte dann im Arbeitsspeicher stehen. Ich hab befragt und der meinte zipios ist gut für sowas. Leider sind die Beispiele etwas dünn gesäht.
Ich hab das mal so versucht:
Code: Alles auswählen
namespace zip = zipios;
zip::ZipFile zFile ("./GIVERZ002.ZIP");
zip::ConstEntries zFileEntries = zFile.entries ();
zip::ConstEntries::iterator zFileIt;
int i = 1;
for (zFileIt = zFileEntries.begin (); zFileIt != zFileEntries.end (); zFileIt++)
{
// Zum testen den Index der zu verarbeitenden Datei ausgeben.
std::cout << "Datei-Nr.: " << i << std::endl;
std::string strDateiname = (*zFileIt)->getName ();
std::cout << "Was kommt hier: " << (*zFileIt)->getName () << std::endl ;
// Eine Datei aus dem ZIP einlesen.
std::istream *iFile;
std::string strHtmlSeite = "";
try
{
iFile = zFile.getInputStream (*(zFileIt));
}
catch (std::ios_base::failure e)
{
if (iFile->good ())
{
std::cout << "Exception std::ios_base::failure, trotzdem alles OK: " << strDateiname << std::endl;
std::cout << "Exception std::ios_base::failure, trotzdem alles OK: " << strDateiname << std::endl;
// Das geht so nicht: std::cout << iFile->rdbuf ();
}
else
{
std::cout << e.what () << std::endl;
std::cout << "zFile.getInputStream hat einen Fehler verursacht" << std::endl;
std::cout << "Datei-Nr: " << i << ", Dateiname: " << strDateiname << std::endl;
exit (1);
}
}
catch (...)
{
std::cout << "irgend ein Problem hier" << std::endl;
}
// Lese die HTML-Seite aus der ZIP-Datei.
std::stringstream strText;
strText << iFile->rdbuf ();
strHtmlSeite = strText.str ();
delete (iFile);
i++;
std::cout << "*** Orginal-Text vor jeder Bearbeitung ***" << std::endl;
std::cout << strHtmlSeite << std::endl; // Orginal Text ausgeben
}
Habt Ihr vielleicht eine Idee was ich da falsch mache?
Wenn Ihr andere Lösungsvorschläge habt würden mich die auch interessieren (aber nur ohne den Aufruf externer Programme)?
Gruß
Alexander