pavel.babyak Posted August 28, 2022 Share Posted August 28, 2022 Здравствуйте. Есть такой тестовый проект test_dir (343M) Так вот, при попытке открыть файл следующим кодом, всё отрабатывает нормально, unigine выдаёт размер файла: int AppWorldLogic::init() { ... { Unigine::Log::message("Step file!\n"); Unigine::String fname = "test/test.txt"; auto file = Unigine::File::create(); if(!file->open( fname, "rb" )){ Unigine::Log::message( "Can'nt open file \n" ); }else{ Unigine::Log::message( "File size: %ld \n", file->getSize() ); } } ... return 1; } Но при попытке получить список файлов, следующий код выводит "Can'nt open dir": int AppWorldLogic::init() { ... { Unigine::Log::message("Step dir!\n"); Unigine::String dname = "test/"; auto dir = Unigine::Dir::create(); if(!dir->open( dname )){ Unigine::Log::message( "Can'nt open dir \n" ); }else{ for(int i = 0; i < dir->getNumFiles(); i++ ){ Unigine::Log::message( "File name: %s \n", dir->getFileName(i) ); } } } ... // Write here code to be called on world initialization: initialize resources for your world scene during the world start. // Write here code to be called on world initialization: initialize resources for your world scene during the world start. return 1; } Система "Calculate Linux", Пакеты: "sys-devel/gcc-11.3.0", "sys-libs/glibc-2.35-r8", "dev-util/cmake-3.22.4", Unigine Community 2.15.1 strace показывает, что системные вызовы отрабатывают нормально, без ошибок. Вопрос, это ошибка в движке или я что-то неправильно делаю? Link to comment
tarragrum Posted August 29, 2022 Share Posted August 29, 2022 Доброго времени суток! Если я правильно понимаю, ваша папка test находится в data_path. Если это так, то используйте dir->open(Unigine::FileSystem::getAbsolutePath(dname)) вместо dir->open( dname ) Также не забудьте вызвать dir->close(); Перед тем как выйти из скоупа Link to comment
pavel.babyak Posted August 29, 2022 Author Share Posted August 29, 2022 2 hours ago, tarragrum said: dir->open(Unigine::FileSystem::getAbsolutePath(dname)) Спасибо. Так заработало. Но почему для файлов относительный путь работает, а для директории нет? 2 hours ago, tarragrum said: dir->close(); А при уничтожении объекта он в деструкторе сам не вызывает close? Link to comment
tarragrum Posted August 29, 2022 Share Posted August 29, 2022 1 hour ago, pavel.babyak said: Спасибо. Так заработало. Но почему для файлов относительный путь работает, а для директории нет? Файл проверяет виртуальный путь, а директория нет) 1 hour ago, pavel.babyak said: А при уничтожении объекта он в деструкторе сам не вызывает close? Нет, не вызывает. Если забудете закрыть, то в дебаге вылетет assert Link to comment
Recommended Posts