public override async Task PartialUpload(string path, string name, int offset, byte[] buffer) { if (base.Config.Folder != "/") { path = base.Config.Folder + path.TrimStart('/'); } using (var sftp = GetClient()) { sftp.Connect(); sftp.ChangeDirectory(path); if (offset == 0) { using (MemoryStream ms = new MemoryStream(buffer)) { sftp.UploadFile(ms, name); } } else { path = path.TrimEnd('/'); path = string.Format("{0}/{1}", path, name); using (SftpFileStream stream = sftp.Open(path, FileMode.Append, FileAccess.Write)) { await stream.WriteAsync(buffer, 0, buffer.Length); await stream.FlushAsync(); } } sftp.Disconnect(); } }