IoHelper.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System.IO;
  2. namespace AutoBuilder
  3. {
  4. public class IoHelper
  5. {
  6. public const int BufferSize = 64;
  7. public static void CopyFile(string source, string dest)
  8. {
  9. using (var sourceStream = new FileStream(source, FileMode.Open, FileAccess.Read))
  10. {
  11. using (var destStream = new FileStream(dest, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite, BufferSize, FileOptions.WriteThrough))
  12. {
  13. sourceStream.CopyTo(destStream);
  14. }
  15. }
  16. }
  17. public static void CopyFolder(string sourceDirectory, string destDirectory)
  18. {
  19. var diSource = new DirectoryInfo(sourceDirectory);
  20. var diDest = new DirectoryInfo(destDirectory);
  21. CopyFolder(diSource, diDest);
  22. }
  23. public static void CopyFolder(DirectoryInfo source, DirectoryInfo dest)
  24. {
  25. if (!source.Exists)
  26. {
  27. throw new IOException($"Src {source.FullName} does not exist");
  28. }
  29. bool folderNew = false;
  30. if (!dest.Exists)
  31. {
  32. dest.Create();
  33. folderNew = true;
  34. }
  35. foreach (var file in source.GetFiles())
  36. {
  37. CopyFile(file.FullName, Path.Combine(dest.FullName, file.Name));
  38. }
  39. foreach (var srcChild in source.GetDirectories())
  40. {
  41. CopyFolder(srcChild, new DirectoryInfo(Path.Combine(dest.FullName, srcChild.Name)));
  42. }
  43. if (folderNew)
  44. {
  45. dest.LastAccessTimeUtc = source.LastAccessTimeUtc;
  46. dest.LastWriteTimeUtc = source.LastWriteTimeUtc;
  47. dest.CreationTimeUtc = source.CreationTimeUtc;
  48. }
  49. }
  50. public static void DeleteFolder(string folderPath)
  51. {
  52. var directoryInfo = new DirectoryInfo(folderPath);
  53. DeleteFolder(directoryInfo);
  54. }
  55. public static void DeleteFolder(DirectoryInfo directoryInfo)
  56. {
  57. if (!directoryInfo.Exists)
  58. {
  59. return;
  60. }
  61. foreach (var file in directoryInfo.GetFiles())
  62. {
  63. file.Attributes = FileAttributes.Normal;
  64. file.Delete();
  65. }
  66. foreach (var subFolder in directoryInfo.GetDirectories())
  67. {
  68. DeleteFolder(subFolder);
  69. }
  70. directoryInfo.Attributes = FileAttributes.Normal;
  71. directoryInfo.Delete();
  72. }
  73. }
  74. }