J'écris maintenant un extracteur pour une archive de base du système de fichiers virtuel (sans compression).
Mon extracteur rencontre des problèmes lorsqu'il écrit un fichier dans un répertoire qui n'existe pas.
Fonction d'extraction:
void extract(ifstream * ifs, unsigned int offset, unsigned int length, std::string path)
{
char * file = new char[length];
ifs->seekg(offset);
ifs->read(file, length);
ofstream ofs(path.c_str(), ios::out|ios::binary);
ofs.write(file, length);
ofs.close();
cout << patch << ", " << length << endl;
system("pause");
delete [] file;
}
ifs
est le fichier racine vfs, offset
est la valeur au démarrage du fichier, length
est la longueur du fichier et path
est une valeur du fichier qui sauvegarde compense len etc.
Par exemple, le chemin est data/char/actormotion.txt.
Merci.
ofstream
ne crée jamais de répertoires. En fait, C++ ne fournit pas un moyen standard de créer un répertoire.
Vous pouvez utiliser dirname
et mkdir
sur les systèmes Posix, ou les équivalents Windows, ou Boost.Filesystem. Fondamentalement, vous devez ajouter du code juste avant l'appel à ofstream
, pour vous assurer que le répertoire existe en le créant si nécessaire.
Il n'est pas possible avec ofstream
de vérifier l'existence d'un répertoire
Peut utiliser boost::filesystem::exists
à la place
boost::filesystem::path dir("path");
if(!(boost::filesystem::exists(dir))){
std::cout<<"Doesn't Exists"<<std::endl;
if (boost::filesystem::create_directory(dir))
std::cout << "....Successfully Created !" << std::end;
}
La création d'un répertoire avec ofstream n'est pas possible. Il est principalement utilisé pour les fichiers. Il existe deux solutions ci-dessous:
Solution 1:
#include <windows.h>
int _tmain() {
//Make the directory
system("mkdir sample");
}
Solution 2:
#include <windows.h>
int _tmain() {
CreateDirectory("MyDir", NULL);
}