#region License and Copyright /* ------------------------------------------------------------------------- * Dotnet Commons IO * * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the * * Free Software Foundation, Inc., * 59 Temple Place, * Suite 330, * Boston, * MA 02111-1307 * USA * * ------------------------------------------------------------------------- */ #endregion using System; using System.IO; namespace Dotnet.Commons.IO { /// <summary> /// This class provides basic facilities for manipulating temporary files. /// </summary> /// <remarks> /// This class includes code developed by /// ThoughtWorks, Inc. (<a href="http://www.thoughtworks.com/">http://www.thoughtworks.com/</a>). /// </remarks> public sealed class TempFileUtils { private TempFileUtils() {} /// <summary> /// Create a temporary directory based on an object type /// </summary> /// <param name="obj"></param> /// <returns></returns> public static string CreateTempDir(object obj) { return CreateTempDir(obj.GetType().FullName); } /// <summary> /// Create a temporary directory based on a given directory name /// </summary> /// <param name="dirname"></param> /// <returns></returns> public static string CreateTempDir(string dirname) { return CreateTempDir(dirname, true); } /// <summary> /// Create a temporary directory given a directory name /// </summary> /// <param name="dirname"></param> /// <param name="overwrite">overwrite the entire directory if set to true</param> /// <returns></returns> public static string CreateTempDir(string dirname, bool overwrite) { if (overwrite) { DeleteTempDir(dirname); } return Directory.CreateDirectory(GetTempPath(dirname)).FullName; } /// <summary> /// Get the temporary directory name, which is a combine of the current /// system temporary directory and a supplied directory name. /// </summary> /// <param name="dirname"></param> /// <returns></returns> public static string GetTempPath(string dirname) { return Path.Combine(Path.GetTempPath(), dirname); } /// <summary> /// Get the temporary directory path, which is a combine of the current /// system temporary directory (eg. C:Temp) /// and an object whose Type is to be used as a temporary folder name. /// </summary> /// <param name="obj">object to be used for creating a temporary folder name</param> /// <returns></returns> public static string GetTempPath(object obj) { return GetTempPath(obj.GetType().FullName); } /// <summary> /// Get the full file path of a file in the temporary directory. /// </summary> /// <param name="dirname"></param> /// <param name="filename"></param> /// <returns></returns> public static string GetTempFilePath(string dirname, string filename) { return Path.Combine(GetTempPath(dirname),filename); } /// <summary> /// Clear the entire temporary directory and delete the directory when it is empty. /// </summary> /// <param name="dirname"></param> /// <returns></returns> public static bool DeleteTempDir(string dirname) { string tempDir = GetTempPath(dirname); if (Directory.Exists(tempDir)) { Directory.Delete(tempDir, true); return true; } else return false; } /// <summary> /// Clear the entire temporary directory and delete the directory when it is empty. /// </summary> /// <param name="obj"></param> /// <returns></returns> public static bool DeleteTempDir(object obj) { return DeleteTempDir(obj.GetType().FullName); } /// <summary> /// Check if a file exists in a temporary directory. /// </summary> /// <param name="dirname"></param> /// <param name="filename"></param> /// <returns></returns> public static bool TempFileExists(string dirname, string filename) { return File.Exists(TempFileUtils.GetTempFilePath(dirname, filename)); } /// <summary> /// Create a file in a temporary directory /// </summary> /// <param name="tempDir"></param> /// <param name="filename"></param> /// <returns></returns> public static string CreateTempTextFile(string tempDir, string filename) { string path = CreateTempDir(tempDir, false); path = Path.Combine(path, filename); using (File.CreateText(path)) { return path; } } /// <summary> /// Create a text file in a temporary directory and text write the content to the file /// </summary> /// <param name="tempDir"></param> /// <param name="filename"></param> /// <param name="content"></param> /// <returns></returns> public static string CreateTempTextFile(string tempDir, string filename, string content) { string path = CreateTempDir(tempDir, false); path = Path.Combine(path, filename); using (StreamWriter stream = File.CreateText(path)) { stream.Write(content); } return path; } /// <summary> /// Create a binary file in a temporary directory and write the binary content to the file /// </summary> /// <param name="tempDir"></param> /// <param name="filename"></param> /// <param name="content">binary content as an array of bytes</param> /// <returns></returns> public static string CreateTempBinaryFile(string tempDir, string filename, byte[] content) { string path = CreateTempDir(tempDir, false); path = Path.Combine(path, filename); using (Stream fs = new FileStream(path, FileMode.Create)) { fs.Write(content, 0, content.Length); fs.Close(); } return path; } /// <summary> /// Update a temporary text file and append content to the end of the file. /// </summary> /// <param name="filename"></param> /// <param name="content"></param> public static void UpdateTempTextFile(string filename, string content) { using (StreamWriter writer = File.AppendText(filename)) { writer.Write(content); } } /// <summary> /// Delete a file /// </summary> /// <param name="path"></param> public static void DeleteTempFile(string path) { if (path != null && File.Exists(path)) { File.Delete(path); } } /// <summary> /// Get the current System temporary directory /// </summary> /// <returns></returns> public static string GetSystemTempDirectory() { return Path.GetTempPath(); } /// <summary> /// Get the directory setting from the Environment variable "TEMP" /// </summary> /// <returns></returns> public static string GetEnvTempDirectory() { return Environment.GetEnvironmentVariable("TEMP"); } } }