private void SetHasWorkOrFinished() { if (this.expectOffset == this.SharedTransferData.TotalLength) { Exception ex = null; if (this.md5HashStream.CheckMd5Hash && this.md5HashStream.SucceededSeparateMd5Calculator) { string calculatedMd5 = this.md5HashStream.MD5HashTransformFinalBlock(); string storedMd5 = this.SharedTransferData.Attributes.ContentMD5; if (!calculatedMd5.Equals(storedMd5)) { ex = new InvalidOperationException( string.Format( CultureInfo.CurrentCulture, Resources.DownloadedMd5MismatchException, this.TransferJob.Source.ToString(), calculatedMd5, storedMd5)); } } this.CloseOwnedOutputStream(); if (this.TransferJob.Transfer.PreserveSMBAttributes) { if (this.SharedTransferData.Attributes.CloudFileNtfsAttributes.HasValue && !string.IsNullOrEmpty(this.filePath)) { LongPathFile.SetFileTime(this.filePath, this.SharedTransferData.Attributes.CreationTime.Value, this.SharedTransferData.Attributes.LastWriteTime.Value); LongPathFile.SetAttributes(this.filePath, Utils.AzureFileNtfsAttributesToLocalAttributes(this.SharedTransferData.Attributes.CloudFileNtfsAttributes.Value)); } } if ((PreserveSMBPermissions.None != this.TransferJob.Transfer.PreserveSMBPermissions) && (!string.IsNullOrEmpty(this.SharedTransferData.Attributes.PortableSDDL))) { if (!string.IsNullOrEmpty(this.filePath)) { FileSecurityOperations.SetFileSecurity( this.filePath, this.SharedTransferData.Attributes.PortableSDDL, this.TransferJob.Transfer.PreserveSMBPermissions); } } this.NotifyFinished(ex); this.state = State.Finished; } else { this.hasWork = true; } }