現在、基本的な仮想ファイルシステムアーカイブ(圧縮なし)の抽出プログラムを作成しています。
存在しないディレクトリにファイルを書き込むときに、エクストラクターが問題に直面しています。
抽出機能:
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
はvfsルートファイル、offset
はファイル開始時の値、length
はファイルの長さ、path
は保存するファイルの値ですオフセットlenなど.
たとえば、パスはdata/char/actormotion.txtです。
ありがとう。
ofstream
はディレクトリを作成しません。実際、C++はディレクトリを作成する標準的な方法を提供していません。
Posixシステムではdirname
とmkdir
を使用できますが、Windowsの同等物、またはBoost.Filesystemを使用することもできます。基本的に、ofstream
の呼び出しの直前にコードを追加して、必要に応じて作成してディレクトリが存在することを確認する必要があります。
ofstream
ではディレクトリの存在を確認することはできません
boost::filesystem::exists
代わりに
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;
}
Ofstreamを使用してディレクトリを作成することはできません。主にファイルに使用されます。以下の2つのソリューションがあります。
解決策1:
#include <windows.h>
int _tmain() {
//Make the directory
system("mkdir sample");
}
解決策2:
#include <windows.h>
int _tmain() {
CreateDirectory("MyDir", NULL);
}