public override FileActionStatus Save(FileDefinition fileDefinition, ContainerDefinition containerDefinition, FileCreateOptions fileCreateOptions, ContainerCreateOptions containerCreateOptions) { var status = new FileActionStatus(); // If we aren't allowing auto creation of directories, fail if (!Directory.Exists(containerDefinition.Path) && !_createPathsAutomatically) { status.Status = Status.NoAction; status.Message = Constants.Messages.NoAction + " Path does not exist, and config to create paths automatically is false."; return status; } // Create directory if it doesn't exist Directory.CreateDirectory(containerDefinition.Path); var path = GetFullFilePath(fileDefinition, containerDefinition); // Overwrite based on provided option if (!fileCreateOptions.OverwriteExisting && File.Exists(path)) { status.Status = Status.NoAction; status.Message = Constants.Messages.NoAction + " File already exists; must explicitly set option to overwrite."; return status; } SaveFile(path, fileDefinition.Data).Wait(); status.Status = Status.Success; status.Message = Constants.Messages.Success; return status; }
public override FileActionStatus TryRead(FileDefinition fileDefinition, ContainerDefinition containerDefinition, out byte[] data) { var status = new FileActionStatus(); var path = GetFullFilePath(fileDefinition, containerDefinition); try { data = File.ReadAllBytes(path); status.Status = Status.Success; status.Message = Constants.Messages.Success; } catch (Exception) { data = null; status.Status = Status.NoAction; status.Message = Constants.Messages.NoAction; } return status; }
public override FileActionStatus Move(FileDefinition fileDefinition, ContainerDefinition containerDefinition, ContainerDefinition newContainerDefinition, string newFileName = null) { var status = new FileActionStatus(); var newFileDefinition = new FileDefinition {Name = newFileName ?? fileDefinition.Name}; // Don't clone fileDefinition since we don't need the data here, just the name var oldPath = GetFullFilePath(fileDefinition, containerDefinition); var newPath = GetFullFilePath(newFileDefinition, newContainerDefinition); // Fail early if file doesn't exist if (!File.Exists(oldPath)) { status.Status = Status.NoAction; status.Message = Constants.Messages.FileDoesNotExist; return status; } try { // If we aren't allowing auto creation of directories, fail if (!Directory.Exists(newContainerDefinition.Path) && !_createPathsAutomatically) { status.Status = Status.NoAction; status.Message = Constants.Messages.NoAction + " Destination path does not exist, and config to create paths automatically is false."; return status; } Directory.CreateDirectory(newContainerDefinition.Path); File.Move(oldPath, newPath); if (_removeEmptyPathsOnMove) RemoveEmptyDirectories(containerDefinition.Path); } catch (Exception) { status.Status = Status.NoAction; status.Message = Constants.Messages.NoAction; } status.Status = Status.Success; status.Message = Constants.Messages.Success; return status; }
private async Task<FileActionStatus> SaveFile(string path, byte[] data) { var status = new FileActionStatus(); try { using (var sourceStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None)) { await sourceStream.WriteAsync(data, 0, data.Length); } ; } catch (Exception) { status.Status = Status.NoAction; status.Message = Constants.Messages.NoAction; } status.Status = Status.Success; status.Message = Constants.Messages.Success; return status; }
public override FileActionStatus Delete(FileDefinition fileDefinition, ContainerDefinition containerDefinition) { var status = new FileActionStatus(); var path = GetFullFilePath(fileDefinition, containerDefinition); // Fail early if file doesn't exist if (!File.Exists(path)) { status.Status = Status.NoAction; status.Message = Constants.Messages.FileDoesNotExist; return status; } try { File.Delete(path); if (_removeEmptyPathsOnDelete) RemoveEmptyDirectories(containerDefinition.Path); } catch (Exception) { status.Status = Status.NoAction; status.Message = Constants.Messages.NoAction; } status.Status = Status.Success; status.Message = Constants.Messages.Success; return status; }