PageRenderTime 39ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/IZWebFileManager/Components/xDirectory.cs

http://izwebfilemanager.googlecode.com/
C# | 258 lines | 97 code | 31 blank | 130 comment | 22 complexity | 229e339a62d13f7f0d93c747dc0003e7 MD5 | raw file
  1. using System;
  2. using System.IO;
  3. using System.Collections.Generic;
  4. using System.Text;
  5. //#////////////////////////////////////////#//
  6. //# Iterative Version of xDirectory.Copy() #//
  7. //# Coder: John D. Storer II #//
  8. //# Date: Thursday, May 18th, 2006 #//
  9. //# Tool: Visual C# 2005 Express Edition #//
  10. //#////////////////////////////////////////#//
  11. namespace System.IO
  12. {
  13. /// <summary>
  14. /// xDirectory v2.0 - Copy a Source Directory and it's SubDirectories/Files.
  15. /// Coder: John Storer II
  16. /// Date: Thursday, May 18, 2006
  17. /// </summary>
  18. internal class xDirectory
  19. {
  20. /// <summary>
  21. /// Default Overwrite Value - Change to Preference.
  22. /// </summary>
  23. private static bool _DefaultOverwrite = false;
  24. /// <summary>
  25. /// Default Folder Iteration Limit - Change to Preference.
  26. /// </summary>
  27. private static int _DefaultIterationLimit = 1000000;
  28. ///////////////////////////////////////////////////////////
  29. /////////////////// String Copy Methods ///////////////////
  30. ///////////////////////////////////////////////////////////
  31. /// <summary>
  32. /// xDirectory.Copy() - Copy a Source Directory and it's SubDirectories/Files
  33. /// </summary>
  34. /// <param name="sSource">The Source Directory</param>
  35. /// <param name="sDestination">The Destination Directory</param>
  36. public static void Copy (string sSource, string sDestination) {
  37. Copy (new DirectoryInfo (sSource), new DirectoryInfo (sDestination), null, null, _DefaultOverwrite, _DefaultIterationLimit);
  38. }
  39. /// <summary>
  40. /// xDirectory.Copy() - Copy a Source Directory and it's SubDirectories/Files
  41. /// </summary>
  42. /// <param name="sSource">The Source Directory</param>
  43. /// <param name="sDestination">The Destination Directory</param>
  44. /// <param name="Overwrite">Whether or not to Overwrite a Destination File if it Exists.</param>
  45. public static void Copy (string sSource, string sDestination, bool Overwrite) {
  46. Copy (new DirectoryInfo (sSource), new DirectoryInfo (sDestination), null, null, Overwrite, _DefaultIterationLimit);
  47. }
  48. /// <summary>
  49. /// xDirectory.Copy() - Copy a Source Directory and it's SubDirectories/Files
  50. /// </summary>
  51. /// <param name="sSource">The Source Directory</param>
  52. /// <param name="sDestination">The Destination Directory</param>
  53. /// <param name="FileFilter">The File Filter (Standard Windows Filter Parameter, Wildcards: "*" and "?")</param>
  54. public static void Copy (string sSource, string sDestination, string FileFilter) {
  55. Copy (new DirectoryInfo (sSource), new DirectoryInfo (sDestination), FileFilter, null, _DefaultOverwrite, _DefaultIterationLimit);
  56. }
  57. /// <summary>
  58. /// xDirectory.Copy() - Copy a Source Directory and it's SubDirectories/Files
  59. /// </summary>
  60. /// <param name="sSource">The Source Directory</param>
  61. /// <param name="sDestination">The Destination Directory</param>
  62. /// <param name="FileFilter">The File Filter (Standard Windows Filter Parameter, Wildcards: "*" and "?")</param>
  63. /// <param name="Overwrite">Whether or not to Overwrite a Destination File if it Exists.</param>
  64. public static void Copy (string sSource, string sDestination, string FileFilter, bool Overwrite) {
  65. Copy (new DirectoryInfo (sSource), new DirectoryInfo (sDestination), FileFilter, null, Overwrite, _DefaultIterationLimit);
  66. }
  67. /// <summary>
  68. /// xDirectory.Copy() - Copy a Source Directory and it's SubDirectories/Files
  69. /// </summary>
  70. /// <param name="sSource">The Source Directory</param>
  71. /// <param name="sDestination">The Destination Directory</param>
  72. /// <param name="FileFilter">The File Filter (Standard Windows Filter Parameter, Wildcards: "*" and "?")</param>
  73. /// <param name="DirectoryFilter">The Directory Filter (Standard Windows Filter Parameter, Wildcards: "*" and "?")</param>
  74. public static void Copy (string sSource, string sDestination, string FileFilter, string DirectoryFilter) {
  75. Copy (new DirectoryInfo (sSource), new DirectoryInfo (sDestination), FileFilter, DirectoryFilter, _DefaultOverwrite, _DefaultIterationLimit);
  76. }
  77. /// <summary>
  78. /// xDirectory.Copy() - Copy a Source Directory and it's SubDirectories/Files
  79. /// </summary>
  80. /// <param name="sSource">The Source Directory</param>
  81. /// <param name="sDestination">The Destination Directory</param>
  82. /// <param name="FileFilter">The File Filter (Standard Windows Filter Parameter, Wildcards: "*" and "?")</param>
  83. /// <param name="DirectoryFilter">The Directory Filter (Standard Windows Filter Parameter, Wildcards: "*" and "?")</param>
  84. /// <param name="Overwrite">Whether or not to Overwrite a Destination File if it Exists.</param>
  85. public static void Copy (string sSource, string sDestination, string FileFilter, string DirectoryFilter, bool Overwrite) {
  86. Copy (new DirectoryInfo (sSource), new DirectoryInfo (sDestination), FileFilter, DirectoryFilter, Overwrite, _DefaultIterationLimit);
  87. }
  88. /// <summary>
  89. /// xDirectory.Copy() - Copy a Source Directory and it's SubDirectories/Files
  90. /// </summary>
  91. /// <param name="sSource">The Source Directory</param>
  92. /// <param name="sDestination">The Destination Directory</param>
  93. /// <param name="FileFilter">The File Filter (Standard Windows Filter Parameter, Wildcards: "*" and "?")</param>
  94. /// <param name="DirectoryFilter">The Directory Filter (Standard Windows Filter Parameter, Wildcards: "*" and "?")</param>
  95. /// <param name="Overwrite">Whether or not to Overwrite a Destination File if it Exists.</param>
  96. /// <param name="FolderLimit">Iteration Limit - Total Number of Folders/SubFolders to Copy</param>
  97. public static void Copy (string sSource, string sDestination, string FileFilter, string DirectoryFilter, bool Overwrite, int FolderLimit) {
  98. Copy (new DirectoryInfo (sSource), new DirectoryInfo (sDestination), FileFilter, DirectoryFilter, Overwrite, FolderLimit);
  99. }
  100. //////////////////////////////////////////////////////////////////
  101. /////////////////// DirectoryInfo Copy Methods ///////////////////
  102. //////////////////////////////////////////////////////////////////
  103. /// <summary>
  104. /// xDirectory.Copy() - Copy a Source Directory and it's SubDirectories/Files
  105. /// </summary>
  106. /// <param name="diSource">The Source Directory</param>
  107. /// <param name="diDestination">The Destination Directory</param>
  108. public static void Copy (DirectoryInfo diSource, DirectoryInfo diDestination) {
  109. Copy (diSource, diDestination, null, null, _DefaultOverwrite, _DefaultIterationLimit);
  110. }
  111. /// <summary>
  112. /// xDirectory.Copy() - Copy a Source Directory and it's SubDirectories/Files
  113. /// </summary>
  114. /// <param name="diSource">The Source Directory</param>
  115. /// <param name="diDestination">The Destination Directory</param>
  116. /// <param name="Overwrite">Whether or not to Overwrite a Destination File if it Exists.</param>
  117. public static void Copy (DirectoryInfo diSource, DirectoryInfo diDestination, bool Overwrite) {
  118. Copy (diSource, diDestination, null, null, Overwrite, _DefaultIterationLimit);
  119. }
  120. /// <summary>
  121. /// xDirectory.Copy() - Copy a Source Directory and it's SubDirectories/Files
  122. /// </summary>
  123. /// <param name="diSource">The Source Directory</param>
  124. /// <param name="diDestination">The Destination Directory</param>
  125. /// <param name="FileFilter">The File Filter (Standard Windows Filter Parameter, Wildcards: "*" and "?")</param>
  126. public static void Copy (DirectoryInfo diSource, DirectoryInfo diDestination, string FileFilter) {
  127. Copy (diSource, diDestination, FileFilter, null, _DefaultOverwrite, _DefaultIterationLimit);
  128. }
  129. /// <summary>
  130. /// xDirectory.Copy() - Copy a Source Directory and it's SubDirectories/Files
  131. /// </summary>
  132. /// <param name="diSource">The Source Directory</param>
  133. /// <param name="diDestination">The Destination Directory</param>
  134. /// <param name="FileFilter">The File Filter (Standard Windows Filter Parameter, Wildcards: "*" and "?")</param>
  135. /// <param name="Overwrite">Whether or not to Overwrite a Destination File if it Exists.</param>
  136. public static void Copy (DirectoryInfo diSource, DirectoryInfo diDestination, string FileFilter, bool Overwrite) {
  137. Copy (diSource, diDestination, FileFilter, null, Overwrite, _DefaultIterationLimit);
  138. }
  139. /// <summary>
  140. /// xDirectory.Copy() - Copy a Source Directory and it's SubDirectories/Files
  141. /// </summary>
  142. /// <param name="diSource">The Source Directory</param>
  143. /// <param name="diDestination">The Destination Directory</param>
  144. /// <param name="FileFilter">The File Filter (Standard Windows Filter Parameter, Wildcards: "*" and "?")</param>
  145. /// <param name="DirectoryFilter">The Directory Filter (Standard Windows Filter Parameter, Wildcards: "*" and "?")</param>
  146. public static void Copy (DirectoryInfo diSource, DirectoryInfo diDestination, string FileFilter, string DirectoryFilter) {
  147. Copy (diSource, diDestination, FileFilter, DirectoryFilter, _DefaultOverwrite, _DefaultIterationLimit);
  148. }
  149. /// <summary>
  150. /// xDirectory.Copy() - Copy a Source Directory and it's SubDirectories/Files
  151. /// </summary>
  152. /// <param name="diSource">The Source Directory</param>
  153. /// <param name="diDestination">The Destination Directory</param>
  154. /// <param name="FileFilter">The File Filter (Standard Windows Filter Parameter, Wildcards: "*" and "?")</param>
  155. /// <param name="DirectoryFilter">The Directory Filter (Standard Windows Filter Parameter, Wildcards: "*" and "?")</param>
  156. /// <param name="Overwrite">Whether or not to Overwrite a Destination File if it Exists.</param>
  157. public static void Copy (DirectoryInfo diSource, DirectoryInfo diDestination, string FileFilter, string DirectoryFilter, bool Overwrite) {
  158. Copy (diSource, diDestination, FileFilter, DirectoryFilter, Overwrite, _DefaultIterationLimit);
  159. }
  160. /////////////////////////////////////////////////////////////////////
  161. /////////////////// The xDirectory.Copy() Method! ///////////////////
  162. /////////////////////////////////////////////////////////////////////
  163. /// <summary>
  164. /// xDirectory.Copy() - Copy a Source Directory and it's SubDirectories/Files
  165. /// </summary>
  166. /// <param name="diSource">The Source Directory</param>
  167. /// <param name="diDestination">The Destination Directory</param>
  168. /// <param name="FileFilter">The File Filter (Standard Windows Filter Parameter, Wildcards: "*" and "?")</param>
  169. /// <param name="DirectoryFilter">The Directory Filter (Standard Windows Filter Parameter, Wildcards: "*" and "?")</param>
  170. /// <param name="Overwrite">Whether or not to Overwrite a Destination File if it Exists.</param>
  171. /// <param name="FolderLimit">Iteration Limit - Total Number of Folders/SubFolders to Copy</param>
  172. public static void Copy (DirectoryInfo diSource, DirectoryInfo diDestination, string FileFilter, string DirectoryFilter, bool Overwrite, int FolderLimit) {
  173. int iterator = 0;
  174. List<DirectoryInfo> diSourceList = new List<DirectoryInfo> ();
  175. List<FileInfo> fiSourceList = new List<FileInfo> ();
  176. try {
  177. ///// Error Checking /////
  178. if (diSource == null)
  179. throw new ArgumentException ("Source Directory: NULL");
  180. if (diDestination == null)
  181. throw new ArgumentException ("Destination Directory: NULL");
  182. if (!diSource.Exists)
  183. throw new IOException ("Source Directory: Does Not Exist");
  184. if (!(FolderLimit > 0))
  185. throw new ArgumentException ("Folder Limit: Less Than 1");
  186. if (DirectoryFilter == null || DirectoryFilter == string.Empty)
  187. DirectoryFilter = "*";
  188. if (FileFilter == null || FileFilter == string.Empty)
  189. FileFilter = "*";
  190. ///// Add Source Directory to List /////
  191. diSourceList.Add (diSource);
  192. ///// First Section: Get Folder/File Listing /////
  193. while (iterator < diSourceList.Count && iterator < FolderLimit) {
  194. foreach (DirectoryInfo di in diSourceList [iterator].GetDirectories (DirectoryFilter))
  195. diSourceList.Add (di);
  196. foreach (FileInfo fi in diSourceList [iterator].GetFiles (FileFilter))
  197. fiSourceList.Add (fi);
  198. iterator++;
  199. }
  200. ///// Second Section: Create Folders from Listing /////
  201. foreach (DirectoryInfo di in diSourceList) {
  202. if (di.Exists) {
  203. string sFolderPath = diDestination.FullName + di.FullName.Remove (0, diSource.FullName.Length);
  204. ///// Prevent Silly IOException /////
  205. if (!Directory.Exists (sFolderPath))
  206. Directory.CreateDirectory (sFolderPath);
  207. }
  208. }
  209. ///// Third Section: Copy Files from Listing /////
  210. foreach (FileInfo fi in fiSourceList) {
  211. if (fi.Exists) {
  212. string sFilePath = diDestination.FullName + fi.FullName.Remove (0, diSource.FullName.Length);
  213. ///// Better Overwrite Test W/O IOException from CopyTo() /////
  214. if (Overwrite)
  215. fi.CopyTo (sFilePath, true);
  216. else {
  217. ///// Prevent Silly IOException /////
  218. if (!File.Exists (sFilePath))
  219. fi.CopyTo (sFilePath, true);
  220. }
  221. }
  222. }
  223. }
  224. catch { throw; }
  225. }
  226. }
  227. }