Exemple #1
0
        public async Task AddAsync(AudioUploadDto audioLocalStoreModel, CancellationToken ct)
        {
            CreateDirectoryIfNotExists(audioLocalStoreModel.Path);

            using (var fileStream = _streamFactory.Create(audioLocalStoreModel.Path, FileMode.Create, FileAccess.Write))
            {
                await audioLocalStoreModel.File.CopyToAsync(fileStream, ct);
            }
        }
        /// <summary>
        /// Handles writing a file from a stream
        /// </summary>
        /// <param name="command">The command</param>
        /// <param name="cancellationToken">The cancellation token</param>
        /// <returns></returns>
        public async Task <WriteFileFromStreamCommandResult> Handle(
            WriteFileFromStreamCommand command,
            CancellationToken cancellationToken)
        {
            Argument.NotNull(command, nameof(command));

            var commandResult = new WriteFileFromStreamCommandResult();

            string folderPath = command.Path;

            if (string.IsNullOrEmpty(folderPath) == false)
            {
                await _directoryCreator
                .CreateDirectoryAsync(folderPath, cancellationToken)
                .ConfigureAwait(Await.Default);
            }

            string filePath = _path.Combine(folderPath, command.FileName);

            byte[] buffer = new byte[BufferSize];

            long bytesWritten = 0L;

            using (var fileStream = _fileStreamFactory.Create(filePath, FileMode.Create, FileAccess.Write, FileShare.None, BufferSize, useAsync: true))
            {
                int read;

                while ((read = await command.File
                               .ReadAsync(buffer, 0, buffer.Length, cancellationToken)
                               .ConfigureAwait(Await.Default)) > 0)
                {
                    bytesWritten += read;

                    if (bytesWritten > command.Size.Value)
                    {
                        throw new InvalidOperationException("Bytes saved greater than file size.");
                    }

                    await fileStream
                    .WriteAsync(buffer, 0, read, cancellationToken)
                    .ConfigureAwait(Await.Default);
                }

                await fileStream
                .FlushAsync(cancellationToken)
                .ConfigureAwait(Await.Default);
            }

            Require.MustBeTrue(bytesWritten, command.Size == bytesWritten, nameof(command.Size), "File size equals bytes saved");

            commandResult.Result = WriteFileFromStreamCommandResultKind.Success;

            commandResult.BytesWritten = bytesWritten;

            return(commandResult);
        }
            public Task SaveAsync(IXmlDocument configXml, string path)
            {
                return(Task.Run(() =>
                {
                    using (IFileStream fileStream = mFileStreamFactory.Create(path, FileMode.Create))
                    {
                        XmlWriterSettings settings = new XmlWriterSettings {
                            Indent = true
                        };

                        using (IXmlWriter xtw = mXmlWriterFactory.Create(fileStream.FileStreamInstance, settings))
                        {
                            configXml.Save(xtw.Writer);
                        }
                    }
                }));
            }
Exemple #4
0
        /// <summary>
        /// Handles creating a stream from the provided file
        /// </summary>
        /// <param name="query">The query</param>
        /// <param name="cancellationToken">The cancellation token</param>
        /// <returns>The response</returns>
        public Task <CreateStreamFromPathQueryResult> Handle(
            CreateStreamFromPathQuery query,
            CancellationToken cancellationToken)
        {
            Argument.NotNull(query, nameof(query));

            var queryResult = new CreateStreamFromPathQueryResult();

            var file = _fileStreamFactory.Create(query.Path, FileMode.Open, FileAccess.Read, FileShare.Read, BufferSize, useAsync: true);

            queryResult.File     = file;
            queryResult.FileName = _path.GetFileName(query.Path);
            queryResult.Path     = query.Path;
            queryResult.Size     = file.Length;

            var info = _fileInfoFactory.FromFileName(query.Path);

            queryResult.CreationTimeUtc  = info.CreationTimeUtc;
            queryResult.LastWriteTimeUtc = info.LastWriteTimeUtc;

            return(Task.FromResult(queryResult));
        }
 public CompoundFile(string path, CompoundFileOptions options, IFileStreamFactory fileStreamFactory)
 {
     Debug.Assert(UINT_ZERO.Length == sizeof(uint));
     FileOptions foptions;
     if (options.UseWriteCache)
         foptions = FileOptions.RandomAccess;
     else
         foptions = FileOptions.RandomAccess | FileOptions.WriteThrough;
     _options = options;
     bool fileExists = File.Exists(path);
     lock (_sync)
     {
         _stream = fileStreamFactory.Create(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read, options.BufferSize, foptions);
         if (!TryLoadFileHeader())
         {
             if (fileExists)
             {
                 if (_header.Version < FILE_VERSION) throw new InvalidDataException("File version is not supported");
                 if (!new System.Text.ASCIIEncoding().GetString(_header.Magic).Equals(MAGIC_STRING)) throw new InvalidDataException("Corrupt file");
                 throw new Exception("Failed to open file. Possible corrupt file");
             }
             InitializeFile();
         }            
     }
 }
Exemple #6
0
 public static Stream CreateDeleteOnCloseStream(this IFileStreamFactory factory, string filePath) => factory.Create(
     filePath,
     FileMode.Open,
     FileAccess.ReadWrite,
     FileShare.ReadWrite,
     bufferSize: 4096,
     FileOptions.DeleteOnClose);