Я пытаюсь открыть файл в качестве вывода, чтобы записать в него преобразованные данные модели. Проблема в настоящее время заключается в том, что, хотя путь существует и файл создан, на самом деле он не открыт. Я попытался удалить проверку !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
Ofstream создает файл, но не открывает ⇐ C++
Программы на C++. Форум разработчиков
1764124597
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();
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79830207/ofstream-creates-a-file-but-doesnt-open[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия