/// <exception cref="ArgumentOutOfRangeException">Позиция не может быть меньше нуля или больше длины файла. -or- /// Если не задано временного хранилища, то позиция в потоке, используемая для поиска, должна быть 0.</exception> public override long Seek(long offset, SeekOrigin origin) { if (StreamForTempSaving != null) { return(StreamForTempSaving.Seek(offset, origin)); } else { if (offset < 0 || offset > Length) { throw new ArgumentOutOfRangeException(nameof(offset), $"Позиция не может быть меньше нуля или больше длины файла. Полученное значение: {offset}.") { Source = GetType().AssemblyQualifiedName } } ; if (origin != SeekOrigin.Begin) { throw new ArgumentOutOfRangeException(nameof(origin), "Если не задано временного хранилища, то позиция в потоке, используемая для поиска, должна быть 0.") { Source = GetType().AssemblyQualifiedName } } ; Positionn = offset; return(offset); } }
/// <exception cref="ArgumentOutOfRangeException">Длина файла не может быть меньше нуля.</exception> public override void SetLength(long value) { if (StreamForTempSaving != null) { StreamForTempSaving.SetLength(value); } else { if (value < 0) { throw new ArgumentOutOfRangeException(nameof(value), $"Длина файла не может быть меньше нуля. Полученное значение: {value}.") { Source = GetType().AssemblyQualifiedName } } ; Lengthh = value; } }
/// <exception cref="Exception">Во время получения всех частей файла и перенесения их во временное хранилище, возникла ошибка.</exception> public override void Flush() { if (StreamForTempSaving == null) { return; } var i = -1; TrySetTaskOfGettingPart().Wait(); try { for (i = 0; i < Parts.Length; i++) { if (!Parts[i]) { GetParts(i, 0, StreamForTempSaving).Wait(); } } } catch (Exception ex) { var typeOfExcSource = Type.GetType(ex.Source, false); if (typeOfExcSource != null) { if (typeOfExcSource.GetTypeInfo().IsSubclassOf(typeof(RemoteFileStreamBase)) || typeOfExcSource.Equals(GetType())) { throw; } } var str = new StringBuilder(); str.AppendLine( "Во время получения всех частей файла и перенесения их во временное хранилище, возникла ошибка."); str.Append($"i {i}."); var exc = new Exception(str.ToString(), ex); exc.Data.Add("StreamForTempSaving", new ObjectAsDictionary(StreamForTempSaving, "StreamForTempSaving", $"{StreamForTempSaving.GetType().Name} StreamForTempSaving")); throw exc; } }