public async Task Execute() { string tempPath = DirectoryPatcher.GetTempPath(SubPath); string newPath = DirectoryPatcher.PatchSource.GetSystemPath(PatchSubPath); string targetPath = DirectoryPatcher.GetTargetPath(SubPath); string backupPath = DirectoryPatcher.GetBackupPath(SubPath); // Ensure the temp directory exists, and decompress the file Directory.CreateDirectory(Path.GetDirectoryName(tempPath)); await DirectoryPatcher.FilePatcher.DecompressAsync(tempPath, newPath); // Extract to a temp location, so that after copying, swapping the old and new file is a quick operation (i.e. not likely to cause inconsistency when interrupted). Copying is also necessary because the file may be shared (moving is not allowed). // Get the old file out of the way, if it exists if (File.Exists(targetPath)) { if (NeedsBackup) { Directory.CreateDirectory(Path.GetDirectoryName(backupPath)); File.Move(targetPath, backupPath); } else { File.Delete(targetPath); } } // Move the new file into place Directory.CreateDirectory(Path.GetDirectoryName(targetPath)); File.Move(tempPath, targetPath); }
public async Task ExecuteAsync() { string tempPath = DirectoryPatcher.GetTempPath(SubPath); string targetPath = DirectoryPatcher.GetTargetPath(SubPath); string patchPath = DirectoryPatcher.PatchSource.GetSystemPath(PatchSubPath); Directory.CreateDirectory(Path.GetDirectoryName(tempPath)); await DirectoryPatcher.FilePatcher.ApplyPatchAsync(targetPath, tempPath, patchPath); File.Delete(targetPath); File.Move(tempPath, targetPath); }
public async Task Execute() { string tempPath = DirectoryPatcher.GetTempPath(SubPath); string targetPath = DirectoryPatcher.GetTargetPath(SubPath); string patchPath = DirectoryPatcher.PatchSource.GetSystemPath(PatchSubPath); // Ensure the temp directory exists, and generate the new file based on the old file and the delta Directory.CreateDirectory(Path.GetDirectoryName(tempPath)); await DirectoryPatcher.FilePatcher.ApplyPatchAsync(targetPath, tempPath, patchPath); // Delete the old file and move the new one into place File.Delete(targetPath); File.Move(tempPath, targetPath); }