using System; using System.Globalization; using System.IO; namespace System.Web.Util { internal sealed class FileUtils { internal delegate object CreateTempFile (string path); static Random rnd = new Random (); internal static object CreateTemporaryFile (string tempdir, CreateTempFile createFile) { return CreateTemporaryFile (tempdir, null, null, createFile); } internal static object CreateTemporaryFile (string tempdir, string extension, CreateTempFile createFile) { return CreateTemporaryFile (tempdir, null, extension, createFile); } internal static object CreateTemporaryFile (string tempdir, string prefix, string extension, CreateTempFile createFile) { if (tempdir == null || tempdir.Length == 0) return null; if (createFile == null) return null; string path = null; bool done = false; object ret = null; int num; do { lock (rnd) { num = rnd.Next (); } path = Path.Combine (tempdir, String.Format ("{0}.{1}{2}", (prefix != null) ? prefix : "", num.ToString ("x", CultureInfo.InvariantCulture), (extension != null) ? "." + extension : "")); try { ret = createFile (path); } catch (System.IO.IOException) { } catch { throw; } } while (ret == null); return ret; } } }