Jump to content

[SOLVED] Unigine::Dir::open не работает(?)


photo

Recommended Posts

Здравствуйте.
Есть такой тестовый проект 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

Доброго времени суток!

Если я правильно понимаю, ваша папка test находится в data_path. Если это так, то используйте

dir->open(Unigine::FileSystem::getAbsolutePath(dname))

вместо

dir->open( dname )

Также не забудьте вызвать

dir->close();

Перед тем как выйти из скоупа

Link to comment
2 hours ago, tarragrum said:
dir->open(Unigine::FileSystem::getAbsolutePath(dname))

Спасибо. Так заработало. Но почему для файлов относительный путь работает, а для директории нет?
 

2 hours ago, tarragrum said:
dir->close();

А при уничтожении объекта он в деструкторе сам не вызывает close?

Link to comment
1 hour ago, pavel.babyak said:

Спасибо. Так заработало. Но почему для файлов относительный путь работает, а для директории нет?

Файл проверяет виртуальный путь, а директория нет)

 

1 hour ago, pavel.babyak said:

А при уничтожении объекта он в деструкторе сам не вызывает close?

Нет, не вызывает. Если забудете закрыть, то в дебаге вылетет assert

Link to comment
  • silent changed the title to [SOLVED] Unigine::Dir::open не работает(?)
×
×
  • Create New...