31

我现在正在为基本的虚拟文件系统存档(不压缩)编写一个提取器。

我的提取器在将文件写入不存在的目录时遇到问题。

提取功能:

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。

谢谢。

4

3 回答 3

37

ofstream从不创建目录。事实上,C++ 并没有提供创建目录的标准方法。

您可以在 Posix 系统、Windows 等效系统或 Boost.Filesystem 上使用dirname和。mkdir基本上,您应该在调用 之前添加一些代码ofstream,以确保在必要时通过创建目录来确保目录存在。

于 2013-09-08T09:20:10.667 回答
20

无法ofstream检查目录是否存在

可以boost::filesystem::exists改用

    #include <boost/filesystem.hpp>

    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::endl;
    }
于 2013-09-08T09:25:26.840 回答
7

无法使用 ofstream 创建目录。它主要用于文件。下面有两种解决方案:

解决方案1:

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

解决方案2:

#include <windows.h>
int _tmain() {
    CreateDirectory("MyDir", NULL);
}
于 2014-12-13T14:30:30.243 回答