Я пытаюсь открыть файл в качестве вывода, чтобы записать в него преобразованные данные модели. Проблема в настоящее время заключается в том, что, хотя путь существует и файл создан, на самом деле он не открыт. Я попытался удалить проверку !is_open(), и, конечно, она выдает ошибку, поскольку она не открыта. Я добавил режимы ios_base, чтобы указать, как открыть файл, и попытался переключиться на пустой конструктор ofstream и неявно вызвать .open(), но безрезультатно.
Опять же, путь абсолютно правильный, файл фактически создается по правильному пути, но по какой-то причине он просто не открывается. Разрешения в порядке, я даже пытался запустить с правами root, но безуспешно.
Спасибо, что уделили время.
void AssetConverter::ConvertModel(const std::string importPath, std::string exportPath, ModelImportSettings* settings) {
// assimp has a comically massive footprint which is why i create it implicitly
Assimp::Importer* importer = new Assimp::Importer();
const aiScene* scene = importer->ReadFile(importPath,
aiProcess_Triangulate
| aiProcess_OptimizeMeshes
| aiProcess_OptimizeGraph
);
delete importer;
if(scene == nullptr) {
Debug::LogError("Couldn't import model from path: " + importPath);
return;
}
bool skinned;
switch (settings->isSkinnedMesh) {
case TRI_TRUE:
skinned = true;
break;
case TRI_FALSE:
skinned = false;
break;
default: // Auto
skinned = scene->HasSkeletons();
break;
}
std::filesystem::path iP(importPath);
exportPath = std::filesystem::absolute(exportPath);
ModelBase m;
if(skinned) {
m = CreateSkinnedModel(scene);
exportPath += "/" + iP.stem().string() + ".nems";
} else {
m = CreateModel(scene);
exportPath += "/" + iP.stem().string() + ".nem";
}
if(std::filesystem::exists(exportPath)) {
std::filesystem::remove(exportPath);
}
// Actual problem starts here
std::ofstream outFile(exportPath, std::ios_base::out | std::ios_base::binary | std::ios_base::trunc);
if(outFile.bad()) {
Debug::LogError("Couldn't open, bad stream: " + exportPath);
return;
}
if(outFile.fail()) {
Debug::LogError("Couldn't open, failed: " + exportPath);
return;
}
if(!outFile.is_open()) {
// enters here every single time
bool exists = std::filesystem::exists(exportPath);
// i had comments showing the rage here, that i have gracefully removed
Debug::LogError("Couldn't open path for writing: " + exportPath);
if(exists) {
Debug::LogError("BUT THE PATH DOES EXIST WHWHWHWHHATATTTATT");
}
return;
}
const std::vector data = m.getData();
for(unsigned char v : data) {
std::string str = std::to_string(v);
outFile.write(str.c_str(), str.length());
}
outFile.flush();
outFile.close();
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... oesnt-open