Ofstream создает файл, но не открываетC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Ofstream создает файл, но не открывает

Сообщение Anonymous »

Я пытаюсь открыть файл в качестве вывода, чтобы записать в него преобразованные данные модели. Проблема в настоящее время заключается в том, что, хотя путь существует и файл создан, на самом деле он не открыт. Я попытался удалить проверку !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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»