Mercurial > silverbladetech
diff MetroWpf/MetroWpf.Framework/Extensions/FileInfoExtensions.cs @ 15:060f02cd4591
Initial commit, pre airport work
author | stevenh7776 stevenhollidge@hotmail.com |
---|---|
date | Mon, 12 Mar 2012 23:05:21 +0800 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MetroWpf/MetroWpf.Framework/Extensions/FileInfoExtensions.cs Mon Mar 12 23:05:21 2012 +0800 @@ -0,0 +1,341 @@ +using System; +using System.Collections.Generic; +using System.IO; + +namespace MetroWpf +{ + /// <summary> + /// Extension methods for the FileInfo and FileInfo-Array classes + /// </summary> + public static class FileInfoExtensions + { + #region · Extensions · + + /// <summary> + /// Renames a file. + /// </summary> + /// <param name="file">The file.</param> + /// <param name="newName">The new name.</param> + /// <returns>The renamed file</returns> + /// <example> + /// <code> + /// var file = new FileInfo(@"c:\test.txt"); + /// file.Rename("test2.txt"); + /// </code></example> + public static FileInfo Rename(this FileInfo file, string newName) + { + var filePath = Path.Combine(Path.GetDirectoryName(file.FullName), newName); + + file.MoveTo(filePath); + + return file; + } + + /// <summary> + /// Renames a without changing its extension. + /// </summary> + /// <param name="file">The file.</param> + /// <param name="newName">The new name.</param> + /// <returns>The renamed file</returns> + /// <example> + /// <code> + /// var file = new FileInfo(@"c:\test.txt"); + /// file.RenameFileWithoutExtension("test3"); + /// </code></example> + public static FileInfo RenameFileWithoutExtension(this FileInfo file, string newName) + { + var fileName = string.Concat(newName, file.Extension); + + file.Rename(fileName); + + return file; + } + + /// <summary> + /// Changes the files extension. + /// </summary> + /// <param name="file">The file.</param> + /// <param name="newExtension">The new extension.</param> + /// <returns>The renamed file</returns> + /// <example> + /// <code> + /// var file = new FileInfo(@"c:\test.txt"); + /// file.ChangeExtension("xml"); + /// </code></example> + public static FileInfo ChangeExtension(this FileInfo file, string newExtension) + { + newExtension = newExtension.EnsureStartsWith("."); + + var fileName = string.Concat(Path.GetFileNameWithoutExtension(file.FullName), newExtension); + + file.Rename(fileName); + + return file; + } + + /// <summary> + /// Changes the extensions of several files at once. + /// </summary> + /// <param name="files">The files.</param> + /// <param name="newExtension">The new extension.</param> + /// <returns>The renamed files</returns> + /// <example> + /// <code> + /// var files = directory.GetFiles("*.txt", "*.xml"); + /// files.ChangeExtensions("tmp"); + /// </code></example> + public static FileInfo[] ChangeExtensions(this FileInfo[] files, string newExtension) + { + files.ForEach(f => f.ChangeExtension(newExtension)); + + return files; + } + + /// <summary> + /// Deletes several files at once and consolidates any exceptions. + /// </summary> + /// <param name="files">The files.</param> + /// <example> + /// <code> + /// var files = directory.GetFiles("*.txt", "*.xml"); + /// files.Delete() + /// </code></example> + public static void Delete(this FileInfo[] files) + { + files.Delete(true); + } + + /// <summary> + /// Deletes several files at once and optionally consolidates any exceptions. + /// </summary> + /// <param name="files">The files.</param> + /// <param name="consolidateExceptions">if set to <c>true</c> exceptions are consolidated and the processing is not interrupted.</param> + /// <example> + /// <code> + /// var files = directory.GetFiles("*.txt", "*.xml"); + /// files.Delete() + /// </code></example> + public static void Delete(this FileInfo[] files, bool consolidateExceptions) + { + List<Exception> exceptions = null; + + foreach (var file in files) + { + try + { + file.Delete(); + } + catch (Exception e) + { + if (consolidateExceptions) + { + if (exceptions == null) + { + exceptions = new List<Exception>(); + } + + exceptions.Add(e); + } + else + { + throw; + } + } + } + + if ((exceptions != null) && (exceptions.Count > 0)) + { + throw new CombinedException + ( + "Error while deleting one or several files, see InnerExceptions array for details.", + exceptions.ToArray() + ); + } + } + + /// <summary> + /// Copies several files to a new folder at once and consolidates any exceptions. + /// </summary> + /// <param name="files">The files.</param> + /// <param name="targetPath">The target path.</param> + /// <returns>The newly created file copies</returns> + /// <example> + /// <code> + /// var files = directory.GetFiles("*.txt", "*.xml"); + /// var copiedFiles = files.CopyTo(@"c:\temp\"); + /// </code></example> + public static FileInfo[] CopyTo(this FileInfo[] files, string targetPath) + { + return files.CopyTo(targetPath, true); + } + + /// <summary> + /// Copies several files to a new folder at once and optionally consolidates any exceptions. + /// </summary> + /// <param name="files">The files.</param> + /// <param name="targetPath">The target path.</param> + /// <param name="consolidateExceptions">if set to <c>true</c> exceptions are consolidated and the processing is not interrupted.</param> + /// <returns>The newly created file copies</returns> + /// <example> + /// <code> + /// var files = directory.GetFiles("*.txt", "*.xml"); + /// var copiedFiles = files.CopyTo(@"c:\temp\"); + /// </code></example> + public static FileInfo[] CopyTo(this FileInfo[] files, string targetPath, bool consolidateExceptions) + { + var copiedfiles = new List<FileInfo>(); + List<Exception> exceptions = null; + + foreach (var file in files) + { + try + { + var fileName = Path.Combine(targetPath, file.Name); + + copiedfiles.Add(file.CopyTo(fileName)); + } + catch (Exception e) + { + if (consolidateExceptions) + { + if (exceptions == null) + { + exceptions = new List<Exception>(); + } + + exceptions.Add(e); + } + else + { + throw; + } + } + } + + if ((exceptions != null) && (exceptions.Count > 0)) + { + throw new CombinedException + ( + "Error while copying one or several files, see InnerExceptions array for details.", + exceptions.ToArray() + ); + } + + return copiedfiles.ToArray(); + } + + /// <summary> + /// Moves several files to a new folder at once and optionally consolidates any exceptions. + /// </summary> + /// <param name="files">The files.</param> + /// <param name="targetPath">The target path.</param> + /// <returns>The moved files</returns> + /// <example> + /// <code> + /// var files = directory.GetFiles("*.txt", "*.xml"); + /// files.MoveTo(@"c:\temp\"); + /// </code></example> + public static FileInfo[] MoveTo(this FileInfo[] files, string targetPath) + { + return files.MoveTo(targetPath, true); + } + + /// <summary> + /// Movies several files to a new folder at once and optionally consolidates any exceptions. + /// </summary> + /// <param name="files">The files.</param> + /// <param name="targetPath">The target path.</param> + /// <param name="consolidateExceptions">if set to <c>true</c> exceptions are consolidated and the processing is not interrupted.</param> + /// <returns>The moved files</returns> + /// <example> + /// <code> + /// var files = directory.GetFiles("*.txt", "*.xml"); + /// files.MoveTo(@"c:\temp\"); + /// </code></example> + public static FileInfo[] MoveTo(this FileInfo[] files, string targetPath, bool consolidateExceptions) + { + List<Exception> exceptions = null; + + foreach (var file in files) + { + try + { + var fileName = Path.Combine(targetPath, file.Name); + + file.MoveTo(fileName); + } + catch (Exception e) + { + if (consolidateExceptions) + { + if (exceptions == null) + { + exceptions = new List<Exception>(); + } + + exceptions.Add(e); + } + else + { + throw; + } + } + } + + if ((exceptions != null) && (exceptions.Count > 0)) + { + throw new CombinedException + ( + "Error while moving one or several files, see InnerExceptions array for details.", + exceptions.ToArray() + ); + } + + return files; + } + + /// <summary> + /// Sets file attributes for several files at once + /// </summary> + /// <param name="files">The files.</param> + /// <param name="attributes">The attributes to be set.</param> + /// <returns>The changed files</returns> + /// <example> + /// <code> + /// var files = directory.GetFiles("*.txt", "*.xml"); + /// files.SetAttributes(FileAttributes.Archive); + /// </code></example> + public static FileInfo[] SetAttributes(this FileInfo[] files, FileAttributes attributes) + { + foreach (var file in files) + { + file.Attributes = attributes; + } + + return files; + } + + /// <summary> + /// Appends file attributes for several files at once (additive to any existing attributes) + /// </summary> + /// <param name="files">The files.</param> + /// <param name="attributes">The attributes to be set.</param> + /// <returns>The changed files</returns> + /// <example> + /// <code> + /// var files = directory.GetFiles("*.txt", "*.xml"); + /// files.SetAttributesAdditive(FileAttributes.Archive); + /// </code></example> + public static FileInfo[] SetAttributesAdditive(this FileInfo[] files, FileAttributes attributes) + { + foreach (var file in files) + { + file.Attributes = (file.Attributes | attributes); + } + + return files; + } + + #endregion + } +} \ No newline at end of file