Use temp file to save metadata for readonly file

TempFile.WithExtension uses GetRandomFileName, which is vanishingly unlikely to generate a collision (trillions of possibilities vs 64k for GetTempFileName). But I like the idea of using common code to generate the name, with a new TempFile method that doesn't return an instance.

You could check whether the file actually DOES exist, but even that isn't a guarantee (something could create it after you check) so it's probably unnecessary.