Fonction pour lire des fichiers dans une archive MPQ
Bonsoir à vous !
J'ai une classe Loader, qui s'occupe de charger une DLL ( la StormLib, qui permet de manipuler des archives au format MPQ et dont la doc et le code source sont disponibles ici : http://www.zezula.net/en/mpq/stormlib.html ) et les fonctions qui m'intéressent.
J'ai ensuite crée une classe mpqArchive, qui utilise les fonctions de la classe Loader, pour manipuler les archives ( Donc, ça permet de gérer le remplacement de fichier etc.., et cela facilement )
Seulement, j'ai du mal à écrire ma fonction QString mpqArchive::readFile(QString filename); dans ce que je pense être un standard. Et d'autre part, je n'arrive pas non plus à trouver un équivalent Qt au format HANDLE.
Voilà pour le moment ce que j'ai :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
QString mpqArchive::readFile(QString filename)
{
if(h != NULL) // h correspond au HANDLE de mon fichier MPQ, qui est un membre de mon objet mpqArchive.
{
if(!hasFile(filename))
{
qDebug() << "Fichier " << filename << " introuvable.";
return QString();
}
HANDLE hFile;
quint32 fileSize;
if(Loader::getInstance().SFileOpenFileEx(h, filename.toStdString().c_str(), 0, &hFile)) // Le loader, qui est un singleton qui charge la dll au lancement du programe, et qui permet dappeler les fonctions de la dll.
{
fileSize = Loader::getInstance().SFileGetFileSize(hFile);
qDebug() << "Taille du fichier " << filename << " : " << fileSize;
char fbuffer[fileSize];
Loader::getInstance().SFileReadFile(hFile, fbuffer, fileSize, 0);
fbuffer[fileSize] = '\0';
return QString(fbuffer);
}
else
{
qDebug() << "Erreur lors de l'ouverture du fichier " << filename << ".";
return QString();
}
}
else
{
qDebug() << "Pas de MPQ ouvert.";
return QString();
}
} |
N'y a-t-il pas moyen de ne pas utiliser de char, et d'utiliser directement un QString ou un QByteArray, plutôt que de convertir par la suite ?
La fonction SFileReadFile() agit comme la fonction de l'API Windows ReadFile(), d'après la doc de la librairie.
Cordialement,
MegaBigboss