namespace Pilz.Updating.Client; public static class Utils { public static void CopyFiles(DirectoryInfo sourceDir, DirectoryInfo destinationDir) { if (!destinationDir.Exists) destinationDir.Create(); foreach (FileInfo sFile in sourceDir.EnumerateFiles("*", SearchOption.TopDirectoryOnly)) { var dFile = new FileInfo(Path.Combine(destinationDir.FullName, sFile.Name)); CopyFile(sFile, dFile); } foreach (DirectoryInfo sDir in sourceDir.EnumerateDirectories("*", SearchOption.TopDirectoryOnly)) { var dDir = destinationDir.CreateSubdirectory(sDir.Name); CopyFiles(sDir, dDir); } } public static void CopyFile(FileInfo sourceFile, FileInfo destinationFile) { var triesLeft = 1; while (triesLeft > 0) { triesLeft--; try { sourceFile.CopyTo(destinationFile.FullName, true); } catch (IOException) { if (triesLeft == 0 && File.Exists(destinationFile.FullName)) { var oldFile = destinationFile.FullName + ".old"; File.Delete(oldFile); File.Move(destinationFile.FullName, oldFile, true); File.Delete(oldFile); triesLeft++; } } catch (Exception) { } } } }