Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }