private void ValidateTempFile(string filePath, string intendedPurpose) { FileInfo info = new FileInfo(filePath); if (info.Length == 0) { throw new RetryableException("Temp file for '" + intendedPurpose + "' was written with 0 bytes"); } else { using (Stream fs = info.OpenRead()) { byte[] buffer = new byte[10]; // This will always read at least one non-zero byte int bytesRead = fs.Read(buffer, 0, buffer.Length); if (buffer.All(b => b == 0)) { RetryableException ex = new RetryableException( "Temp file for '" + intendedPurpose + "' was written with " + bytesRead + " null bytes"); EventMetadata eventInfo = new EventMetadata(); eventInfo.Add("ErrorMessage", "Validation of temporary downloaded file failed"); eventInfo.Add("file", filePath); eventInfo.Add("intendedPurpose", intendedPurpose); eventInfo.Add("Exception", ex.ToString()); this.Tracer.RelatedEvent(EventLevel.Warning, "Warning", eventInfo); throw ex; } } } }
private void ValidateTempFile(string tempFilePath, string finalFilePath) { using (Stream fs = this.fileSystem.OpenFileStream(tempFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, callFlushFileBuffers: false)) { if (fs.Length == 0) { throw new RetryableException($"Temp file '{tempFilePath}' for '{finalFilePath}' was written with 0 bytes"); } else { byte[] buffer = new byte[10]; // Temp files should always have at least one non-zero byte int bytesRead = fs.Read(buffer, 0, buffer.Length); if (buffer.All(b => b == 0)) { RetryableException ex = new RetryableException( $"Temp file '{tempFilePath}' for '{finalFilePath}' was written with {bytesRead} null bytes"); EventMetadata eventInfo = CreateEventMetadata(ex); eventInfo.Add("file", tempFilePath); eventInfo.Add("finalFilePath", finalFilePath); this.Tracer.RelatedWarning(eventInfo, $"{nameof(this.ValidateTempFile)}: Temp file invalid"); throw ex; } } } }
private void ValidateTempFile(string filePath, string intendedPurpose) { using (Stream fs = this.fileSystem.OpenFileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None)) { if (fs.Length == 0) { throw new RetryableException("Temp file for '" + intendedPurpose + "' was written with 0 bytes"); } else { byte[] buffer = new byte[10]; // Temp files should always have at least one non-zero byte int bytesRead = fs.Read(buffer, 0, buffer.Length); if (buffer.All(b => b == 0)) { RetryableException ex = new RetryableException( "Temp file for '" + intendedPurpose + "' was written with " + bytesRead + " null bytes"); EventMetadata eventInfo = new EventMetadata(); eventInfo.Add("file", filePath); eventInfo.Add("intendedPurpose", intendedPurpose); eventInfo.Add("Exception", ex.ToString()); this.Tracer.RelatedWarning(eventInfo, "Validation of temporary downloaded file failed"); throw ex; } } } }