Instead of a single temporary directory, we just create one per file and encapsulate it in a structure, so we can get both the file path and a temp dir that's dropped upon the struct leaving scope.