- Home /
"Too many files open" while working with textures
I've got a portion of one of my scripts that iterates through the textures in a scene and writes them out to disk as PNGs. The code to write out the texture is as follows:
// Mark the texture as readable
TextureImporter textureImporter = (TextureImporter)AssetImporter.GetAtPath(assetPath);
textureImporter.isReadable = true;
AssetDatabase.ImportAsset(assetPath, ImportAssetOptions.ForceUpdate);
// Reload the texture after the readable settings have been changed
Texture2D texture = AssetDatabase.LoadAssetAtPath(assetPath, typeof(Texture2D)) as Texture2D;
// Force the texture into a usable format (ARGB32)
Texture2D pngTexture = new Texture2D(texture.width, texture.height);
pngTexture.SetPixels(texture.GetPixels());
Byte[] bytes = pngTexture.EncodeToPNG();
using (FileStream stream = new FileStream(outputPath, FileMode.Create))
{
stream.Write(bytes, 0, bytes.Length);
stream.Close();
}
// Clean up the temp texture
DestroyImmediate(pngTexture);
After doing this on only a few textures (I don't know the exact count but it seems pretty low) the script will stop dead and the console displays "Too many files open". After this point, Unity becomes pretty useless and you have to restart to get things back to normal.
This is fairly confusing to me, since I'm taking great care to close any file handles I explicitly open. Really, I shouldn't even need the stream.Close
, as the using
statement will dispose of the resource anyway. I could understand if the AssetDatabase functions (like LoadAssetAtPath
) opened a file handle, but I'm at a complete loss as to how to close said handle if that's the case. Is there something more that I need to be doing to clean up after loading assets, or is Mono just failing to handle files correctly?
Mac OSX 10.6, Unity 3.4 if it matters.
Your answer
Follow this Question
Related Questions
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
How would I implement this game mechanic? 0 Answers
Trying to view paper object on button press GUI Texture 3 Answers
How to gradient-wise fill a bitmap programmatically 1 Answer
Can someone help me fix my Javascript for Flickering Light? 6 Answers