我现在正在为基本的虚拟文件系统存档编写一个提取器(没有压缩)。
我的提取器在将文件写入不存在的目录时遇到问题。
提取功能:
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等。
例如path是data / char / actormotion.txt。
感谢。
答案 0 :(得分:28)
ofstream
永远不会创建目录。实际上,C ++没有提供创建目录的标准方法。
您可以在Posix系统或Windows等效系统或Boost.Filesystem上使用dirname
和mkdir
。基本上,您应该在调用ofstream
之前添加一些代码,以确保在必要时通过创建目录来存在该目录。
答案 1 :(得分:17)
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;
}
答案 2 :(得分:7)
无法使用ofstream创建目录。它主要用于文件。下面有两种解决方案:
解决方案1:
#include <windows.h>
int _tmain() {
//Make the directory
system("mkdir sample");
}
解决方案2:
#include <windows.h>
int _tmain() {
CreateDirectory("MyDir", NULL);
}