I am understanding you are creating one rendertarget per each object in the list, to render the content of a directory, sending all the rendertargets to another rendertarget. Is that? Unless those rendertargets have the actual content of the images of a directory and change in realtime, it's an enormous effort for something that little.
Obviously, you are missing a feature of Irrlicht, or two. You don't need such amount of rendertargets. That's just crazy! not to speak the amount of ram needed to create and mantain them, or that you could just draw to one, and reuse it after. Just think that whatever is shown in the screen, won't appear until you put the "endScene()" call, so, what you do in the middle is just up to you. No one will see.
For example, think of this:
You have a texture (just one) with all the icons you need. All in their place. Also, you have an array or a list with the top left corner pixel of all of them, and their size. And you can access this list by type of file.
At this pont, you read the directory, and store the content inside a list.
According to the file type in the list, you may store the top left corner and the size of the corresponding icon on another 2 lists, and then, you can draw all these icons at once, using the drawBatches method of Irrlicht.
drawing 2D batches
You can do something similar with the text, I think irrlicht is capable of using rectangles to limit the area where the text is rendered, so you calculate an array of rectangles, and use the IGUIFont methods to render text.
IGUIFont method to draw text constrained to a rectangle.
The good thing is that you don't need extra rendertargets, You only need the ITextures for the fonts and the icons, and the rest you know how to do it, or you can investigate a bit more. It is not dificult. Read a bit more the documentation!
"There is nothing truly useless, it always serves as a bad example". Arthur A. Schmitt