1 // 2 // System.Web.Compilation.AppCodeCompiler: A compiler for the App_Code folder 3 // 4 // Authors: 5 // Marek Habersack (grendello@gmail.com) 6 // 7 // (C) 2006 Marek Habersack 8 // 9 10 // 11 // Permission is hereby granted, free of charge, to any person obtaining 12 // a copy of this software and associated documentation files (the 13 // "Software"), to deal in the Software without restriction, including 14 // without limitation the rights to use, copy, modify, merge, publish, 15 // distribute, sublicense, and/or sell copies of the Software, and to 16 // permit persons to whom the Software is furnished to do so, subject to 17 // the following conditions: 18 // 19 // The above copyright notice and this permission notice shall be 20 // included in all copies or substantial portions of the Software. 21 // 22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 29 // 30 31 using System; 32 using System.Diagnostics; 33 using System.Globalization; 34 using System.IO; 35 36 namespace System.Web.Util 37 { 38 internal sealed class FileUtils 39 { CreateTempFile(string path)40 internal delegate object CreateTempFile (string path); 41 42 static Random rnd = new Random (); 43 CreateTemporaryFile(string tempdir, CreateTempFile createFile)44 internal static object CreateTemporaryFile (string tempdir, CreateTempFile createFile) 45 { 46 return CreateTemporaryFile (tempdir, null, null, createFile); 47 } 48 CreateTemporaryFile(string tempdir, string extension, CreateTempFile createFile)49 internal static object CreateTemporaryFile (string tempdir, string extension, CreateTempFile createFile) 50 { 51 return CreateTemporaryFile (tempdir, null, extension, createFile); 52 } 53 CreateTemporaryFile(string tempdir, string prefix, string extension, CreateTempFile createFile)54 internal static object CreateTemporaryFile (string tempdir, string prefix, string extension, CreateTempFile createFile) 55 { 56 if (tempdir == null || tempdir.Length == 0) 57 return null; 58 if (createFile == null) 59 return null; 60 string path = null; 61 object ret = null; 62 int num; 63 64 do { 65 lock (rnd) { 66 num = rnd.Next (); 67 } 68 69 path = Path.Combine (tempdir, 70 String.Format ("{0}{1}{2}", (prefix != null) ? prefix + "." : "", 71 num.ToString ("x", Helpers.InvariantCulture), 72 (extension != null) ? "." + extension : "")); 73 74 try { 75 ret = createFile (path); 76 } catch (System.IO.IOException) { 77 } catch { throw; } 78 } while (ret == null); 79 80 return ret; 81 } 82 83 [Conditional ("DEVEL")] WriteLineLog(string logFilePath, string format, params object[] parms)84 public static void WriteLineLog (string logFilePath, string format, params object[] parms) 85 { 86 WriteLog (logFilePath, format + Environment.NewLine, parms); 87 } 88 89 [Conditional ("DEVEL")] WriteLog(string logFilePath, string format, params object[] parms)90 public static void WriteLog (string logFilePath, string format, params object[] parms) 91 { 92 string path = logFilePath != null && logFilePath.Length > 0 ? logFilePath : 93 Path.Combine (Path.GetTempPath (), "System.Web.log"); 94 using (TextWriter tw = new StreamWriter (path, true)) { 95 if (parms != null && parms.Length > 0) 96 tw.Write (format, parms); 97 else 98 tw.Write (format); 99 } 100 } 101 } 102 } 103