Пример #1
0
        /// <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);
            }
        }
Пример #2
0
        /// <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;
            }
        }
Пример #3
0
        /// <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;
            }
        }