Как создавать каталоги автоматически с использованием потока
Теперь я пишу экстрактор для основного архива виртуальной файловой системы (без сжатия).
У моего экстрактора возникают проблемы при записи файла в каталог, который не существует.
Функция извлечения:
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.
Благодарю.
Ответы
Ответ 1
ofstream
никогда не создает каталоги. Фактически, C++ не предоставляет стандартный способ создания каталога.
Вы можете использовать dirname
и mkdir
в системах Posix или эквивалентах Windows или Boost.Filesystem. В принципе, вы должны добавить код непосредственно перед вызовом ofstream
, чтобы убедиться, что каталог существует, создав его, если это необходимо.
Ответ 2
Невозможно, чтобы с помощью 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;
}
Ответ 3
Создание каталога с потоком невозможно. Он в основном используется для файлов. Ниже приведены два решения:
Решение 1:
#include <windows.h>
int _tmain() {
//Make the directory
system("mkdir sample");
}
Решение 2:
#include <windows.h>
int _tmain() {
CreateDirectory("MyDir", NULL);
}