web-dev-qa-db-ja.com

ofstreamを使用してディレクトリを自動的に作成する方法

現在、基本的な仮想ファイルシステムアーカイブ(圧縮なし)の抽出プログラムを作成しています。

存在しないディレクトリにファイルを書き込むときに、エクストラクターが問題に直面しています。

抽出機能:

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です。

ありがとう。

25
Kacper Fałat

ofstreamはディレクトリを作成しません。実際、C++はディレクトリを作成する標準的な方法を提供していません。

Posixシステムではdirnamemkdirを使用できますが、Windowsの同等物、またはBoost.Filesystemを使用することもできます。基本的に、ofstreamの呼び出しの直前にコードを追加して、必要に応じて作成してディレクトリが存在することを確認する必要があります。

28
Steve Jessop

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;
    }
17
P0W

Ofstreamを使用してディレクトリを作成することはできません。主にファイルに使用されます。以下の2つのソリューションがあります。

解決策1:

#include <windows.h>
int _tmain() {
    //Make the directory
    system("mkdir sample");
}

解決策2:

#include <windows.h>
int _tmain() {
    CreateDirectory("MyDir", NULL);
}