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); } } })); }
/// <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(); } } }
public static Stream CreateDeleteOnCloseStream(this IFileStreamFactory factory, string filePath) => factory.Create( filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite, bufferSize: 4096, FileOptions.DeleteOnClose);