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)); var triesLeft = 1; while (triesLeft > 0) { triesLeft--; try { sFile.CopyTo(dFile.FullName, true); } catch (IOException) { if (triesLeft == 0 && File.Exists(dFile.FullName)) { var oldFile = dFile.FullName + ".old"; File.Delete(oldFile); File.Move(dFile.FullName, oldFile, true); File.Delete(oldFile); triesLeft++; } } catch (Exception) { } } } foreach (DirectoryInfo sDir in sourceDir.EnumerateDirectories("*", SearchOption.TopDirectoryOnly)) { var dDir = destinationDir.CreateSubdirectory(sDir.Name); CopyFiles(sDir, dDir); } } }