/// <summary> /// Try to replace all saved files into the parent state. /// </summary> /// <param name="temporaryContainer"></param> /// <param name="destinationFileSystem"></param> /// <param name="stateStreamManager"></param> /// <returns>If the replacement was successful.</returns> private async Task <SaveResult> TryReplaceFiles(IFileSystem temporaryContainer, IFileSystem destinationFileSystem, IStreamManager stateStreamManager) { // 1. Check that all saved files exist in the parent filesystem already or can at least be created if missing foreach (var file in temporaryContainer.EnumeratePaths(UPath.Root)) { if (!destinationFileSystem.FileExists(file) && !destinationFileSystem.CanCreateFiles) { return(new SaveResult(false, $"'{file}' did not exist in '{destinationFileSystem.ConvertPathToInternal(UPath.Root)}'.")); } } // 2. Set new file data into parent file system foreach (var file in temporaryContainer.EnumeratePaths(UPath.Root)) { try { var openedFile = await temporaryContainer.OpenFileAsync(file); destinationFileSystem.SetFileData(file, openedFile); stateStreamManager.Register(openedFile); } catch (Exception ex) { return(new SaveResult(ex)); } } return(SaveResult.SuccessfulResult); }
/// <inheritdoc /> public Stream CreateTemporaryStream() { EnsureTemporaryDirectory(_temporaryDirectory); var fileName = GetTemporaryName(); var file = File.Create(Path.Combine(_temporaryDirectory, fileName)); var temporaryStream = new TemporaryStream(file); _streamManager.Register(temporaryStream); return(temporaryStream); }