Exemple #1
0
 public StreamContent(Stream content, int bufferSize = 32768)
 {
     if (content == null)
     {
         throw new ArgumentNullException(nameof(content));
     }
     if (!content.CanRead || !content.CanSeek)
     {
         throw new ArgumentException(Resources.ArgumentException_CanNotReadOrSeek, nameof(content));
     }
     if (bufferSize < 1)
     {
         throw ExceptionHelper.CanNotBeLess <int>(nameof(bufferSize), 1);
     }
     this._content               = content;
     this._bufferSize            = bufferSize;
     this._initialStreamPosition = this._content.Position;
     this._contentType           = "application/octet-stream";
 }
Exemple #2
0
 public FileContent(string pathToContent, int bufferSize = 32768)
 {
     if (pathToContent == null)
     {
         throw new ArgumentNullException(nameof(pathToContent));
     }
     if (pathToContent.Length == 0)
     {
         throw ExceptionHelper.EmptyString(nameof(pathToContent));
     }
     if (bufferSize < 1)
     {
         throw ExceptionHelper.CanNotBeLess <int>(nameof(bufferSize), 1);
     }
     this._content               = (Stream) new FileStream(pathToContent, FileMode.Open, FileAccess.Read);
     this._bufferSize            = bufferSize;
     this._initialStreamPosition = 0L;
     this._contentType           = Http.DetermineMediaType(Path.GetExtension(pathToContent));
 }
        /// <summary>
        /// Возвращает случайную строку, состоящую из латинских букв и цифр.
        /// </summary>
        /// <param name="length">Длина случайной строки.</param>
        /// <param name="onlyLetters">Указывает, нужно ли генерировать строку только из букв.</param>
        /// <returns>Случайная строка, состоящая из латинских букв и цифр.</returns>
        /// <exception cref="System.ArgumentOutOfRangeException">Значение параметра <paramref name="length"/> меньше 1.</exception>
        public static string NextString(int length, bool onlyLetters = false)
        {
            #region Проверка параметров

            if (length < 1)
            {
                throw ExceptionHelper.CanNotBeLess("length", 1);
            }

            #endregion

            int minValue   = (onlyLetters) ? 1 : 0;
            var strBuilder = new StringBuilder(length);

            lock (_rand)
            {
                for (int i = 0; i < length; ++i)
                {
                    switch (_rand.Next(minValue, 3))
                    {
                    case 0:
                        strBuilder.Append((char)_rand.Next(48, 58));
                        break;

                    case 1:
                        strBuilder.Append((char)_rand.Next(97, 123));
                        break;

                    case 2:
                        strBuilder.Append((char)_rand.Next(65, 91));
                        break;
                    }
                }
            }

            return(strBuilder.ToString());
        }
Exemple #4
0
        /// <summary>
        /// Инициализирует новый экземпляр класса <see cref="BytesContent"/>.
        /// </summary>
        /// <param name="content">Содержимое тела запроса.</param>
        /// <param name="offset">Смещение в байтах для контента.</param>
        /// <param name="count">Число байтов отправляемых из контента.</param>
        /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="content"/> равно <see langword="null"/>.</exception>
        /// <exception cref="System.ArgumentOutOfRangeException">
        /// Значение параметра <paramref name="offset"/> меньше 0.
        /// -или-
        /// Значение параметра <paramref name="offset"/> больше длины содержимого.
        /// -или-
        /// Значение параметра <paramref name="count"/> меньше 0.
        /// -или-
        /// Значение параметра <paramref name="count"/> больше (длина содержимого - смещение).</exception>
        /// <remarks>По умолчанию используется тип контента - 'application/octet-stream'.</remarks>
        public BytesContent(byte[] content, int offset, int count)
        {
            #region Проверка параметров

            if (content == null)
            {
                throw new ArgumentNullException("content");
            }

            if (offset < 0)
            {
                throw ExceptionHelper.CanNotBeLess("offset", 0);
            }

            if (offset > content.Length)
            {
                throw ExceptionHelper.CanNotBeGreater("offset", content.Length);
            }

            if (count < 0)
            {
                throw ExceptionHelper.CanNotBeLess("count", 0);
            }

            if (count > (content.Length - offset))
            {
                throw ExceptionHelper.CanNotBeGreater("count", content.Length - offset);
            }

            #endregion

            _content = content;
            _offset  = offset;
            _count   = count;

            _contentType = "application/octet-stream";
        }
Exemple #5
0
        public static string Substring(
            this string str,
            string left,
            int startIndex,
            StringComparison comparsion = StringComparison.Ordinal)
        {
            if (string.IsNullOrEmpty(str))
            {
                return(string.Empty);
            }
            if (left == null)
            {
                throw new ArgumentNullException(nameof(left));
            }
            if (left.Length == 0)
            {
                throw ExceptionHelper.EmptyString(nameof(left));
            }
            if (startIndex < 0)
            {
                throw ExceptionHelper.CanNotBeLess <int>(nameof(startIndex), 0);
            }
            if (startIndex >= str.Length)
            {
                throw new ArgumentOutOfRangeException(nameof(startIndex), Resources.ArgumentOutOfRangeException_StringHelper_MoreLengthString);
            }
            int num = str.IndexOf(left, startIndex, comparsion);

            if (num == -1)
            {
                return(string.Empty);
            }
            int startIndex1 = num + left.Length;
            int length      = str.Length - startIndex1;

            return(str.Substring(startIndex1, length));
        }
Exemple #6
0
        /// <summary>
        /// Извлекает подстроки из строки. Подстрока ищется между двумя заданными строками, начиная с заданной позиции.
        /// </summary>
        /// <param name="str">Строка, в которой будет поиск подстрок.</param>
        /// <param name="left">Строка, которая находится слева от искомой подстроки.</param>
        /// <param name="right">Строка, которая находится справа от искомой подстроки.</param>
        /// <param name="startIndex">Позиция, с которой начинается поиск подстрок. Отсчёт от 0.</param>
        /// <param name="comparsion">Одно из значений перечисления, определяющее правила поиска.</param>
        /// <returns>Найденые подстроки, иначе пустой массив строк.</returns>
        /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="left"/> или <paramref name="right"/> равно <see langword="null"/>.</exception>
        /// <exception cref="System.ArgumentException">Значение параметра <paramref name="left"/> или <paramref name="right"/> является пустой строкой.</exception>
        /// <exception cref="System.ArgumentOutOfRangeException">
        /// Значение параметра <paramref name="startIndex"/> меньше 0.
        /// -или-
        /// Значение параметра <paramref name="startIndex"/> равно или больше длины строки <paramref name="str"/>.
        /// </exception>
        public static string[] Substrings(this string str, string left, string right,
                                          int startIndex, StringComparison comparsion = StringComparison.Ordinal)
        {
            if (string.IsNullOrEmpty(str))
            {
                return(new string[0]);
            }

            #region Проверка параметров

            if (left == null)
            {
                throw new ArgumentNullException("left");
            }

            if (left.Length == 0)
            {
                throw ExceptionHelper.EmptyString("left");
            }

            if (right == null)
            {
                throw new ArgumentNullException("right");
            }

            if (right.Length == 0)
            {
                throw ExceptionHelper.EmptyString("right");
            }

            if (startIndex < 0)
            {
                throw ExceptionHelper.CanNotBeLess("startIndex", 0);
            }

            if (startIndex >= str.Length)
            {
                throw new ArgumentOutOfRangeException("startIndex",
                                                      "The starting position can not be more than the length of the line.");
            }

            #endregion

            int           currentStartIndex = startIndex;
            List <string> strings           = new List <string>();

            while (true)
            {
                // Ищем начало позиции левой подстроки.
                int leftPosBegin = str.IndexOf(left, currentStartIndex, comparsion);

                if (leftPosBegin == -1)
                {
                    break;
                }

                // Вычисляем конец позиции левой подстроки.
                int leftPosEnd = leftPosBegin + left.Length;

                // Ищем начало позиции правой строки.
                int rightPos = str.IndexOf(right, leftPosEnd, comparsion);

                if (rightPos == -1)
                {
                    break;
                }

                // Вычисляем длину найденной подстроки.
                int length = rightPos - leftPosEnd;

                strings.Add(str.Substring(leftPosEnd, length));

                // Вычисляем конец позиции правой подстроки.
                currentStartIndex = rightPos + right.Length;
            }

            return(strings.ToArray());
        }
Exemple #7
0
        /// <summary>
        /// Извлекает последнею подстроку из строки. Подстрока ищется между двумя заданными строками, начиная с заданной позиции.
        /// </summary>
        /// <param name="str">Строка, в которой будет поиск последней подстроки.</param>
        /// <param name="left">Строка, которая находится слева от искомой подстроки.</param>
        /// <param name="right">Строка, которая находится справа от искомой подстроки.</param>
        /// <param name="startIndex">Позиция, с которой начинается поиск подстроки. Отсчёт от 0.</param>
        /// <param name="comparsion">Одно из значений перечисления, определяющее правила поиска.</param>
        /// <returns>Найденая подстрока, иначе пустая строка.</returns>
        /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="left"/> или <paramref name="right"/> равно <see langword="null"/>.</exception>
        /// <exception cref="System.ArgumentException">Значение параметра <paramref name="left"/> или <paramref name="right"/> является пустой строкой.</exception>
        /// <exception cref="System.ArgumentOutOfRangeException">
        /// Значение параметра <paramref name="startIndex"/> меньше 0.
        /// -или-
        /// Значение параметра <paramref name="startIndex"/> равно или больше длины строки <paramref name="str"/>.
        /// </exception>
        public static string LastSubstring(this string str, string left, string right,
                                           int startIndex, StringComparison comparsion = StringComparison.Ordinal)
        {
            if (string.IsNullOrEmpty(str))
            {
                return(string.Empty);
            }

            #region Проверка параметров

            if (left == null)
            {
                throw new ArgumentNullException("left");
            }

            if (left.Length == 0)
            {
                throw ExceptionHelper.EmptyString("left");
            }

            if (right == null)
            {
                throw new ArgumentNullException("right");
            }

            if (right.Length == 0)
            {
                throw ExceptionHelper.EmptyString("right");
            }

            if (startIndex < 0)
            {
                throw ExceptionHelper.CanNotBeLess("startIndex", 0);
            }

            if (startIndex >= str.Length)
            {
                throw new ArgumentOutOfRangeException("startIndex",
                                                      "The starting position can not be more than the length of the line.");
            }

            #endregion

            // Ищем начало позиции левой подстроки.
            int leftPosBegin = str.LastIndexOf(left, startIndex, comparsion);

            if (leftPosBegin == -1)
            {
                return(string.Empty);
            }

            // Вычисляем конец позиции левой подстроки.
            int leftPosEnd = leftPosBegin + left.Length;

            // Ищем начало позиции правой подстроки.
            int rightPos = str.IndexOf(right, leftPosEnd, comparsion);

            if (rightPos == -1)
            {
                if (leftPosBegin == 0)
                {
                    return(string.Empty);
                }
                else
                {
                    return(LastSubstring(str, left, right, leftPosBegin - 1, comparsion));
                }
            }

            // Вычисляем длину найденной подстроки.
            int length = rightPos - leftPosEnd;

            return(str.Substring(leftPosEnd, length));
        }
Exemple #8
0
        public static string[] Substrings(
            this string str,
            string left,
            string right,
            int startIndex,
            StringComparison comparsion = StringComparison.Ordinal)
        {
            if (string.IsNullOrEmpty(str))
            {
                return(new string[0]);
            }
            if (left == null)
            {
                throw new ArgumentNullException(nameof(left));
            }
            if (left.Length == 0)
            {
                throw ExceptionHelper.EmptyString(nameof(left));
            }
            if (right == null)
            {
                throw new ArgumentNullException(nameof(right));
            }
            if (right.Length == 0)
            {
                throw ExceptionHelper.EmptyString(nameof(right));
            }
            if (startIndex < 0)
            {
                throw ExceptionHelper.CanNotBeLess <int>(nameof(startIndex), 0);
            }
            if (startIndex >= str.Length)
            {
                throw new ArgumentOutOfRangeException(nameof(startIndex), Resources.ArgumentOutOfRangeException_StringHelper_MoreLengthString);
            }
            int           startIndex1 = startIndex;
            List <string> stringList  = new List <string>();

            while (true)
            {
                int num1 = str.IndexOf(left, startIndex1, comparsion);
                if (num1 != -1)
                {
                    int startIndex2 = num1 + left.Length;
                    int num2        = str.IndexOf(right, startIndex2, comparsion);
                    if (num2 != -1)
                    {
                        int length = num2 - startIndex2;
                        stringList.Add(str.Substring(startIndex2, length));
                        startIndex1 = num2 + right.Length;
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            }
            return(stringList.ToArray());
        }
Exemple #9
0
        /// <summary>
        /// 提取字符串的字符串。给定字符串中寻找两者之间从预定位置。
        /// </summary>
        /// <param name="str">将字符串中查找字符串。</param>
        /// <param name="left">行,左侧显示未知字符串。</param>
        /// <param name="right">行,位于右边的未知字符串。</param>
        /// <param name="startIndex">立场,开始查找字符串。从读0.</param>
        /// <param name="comparsion">枚举值之一,定义规则搜索。</param>
        /// <returns>发现空字符串或字符串数组。</returns>
        /// <exception cref="System.ArgumentNullException">参数值<paramref name="left"/> 或<paramref name="right"/> 等于<see langword="null"/>.</exception>
        /// <exception cref="System.ArgumentException">参数值<paramref name="left"/> 或<paramref name="right"/> 是空字符串。</exception>
        /// <exception cref="System.ArgumentOutOfRangeException">
        /// 参数值<paramref name="startIndex"/> 少0.
        /// -或-
        /// 参数值<paramref name="startIndex"/> 等于或大于字符串长度<paramref name="str"/>.
        /// </exception>
        public static string[] Substrings(this string str, string left, string right,
                                          int startIndex, StringComparison comparsion = StringComparison.Ordinal)
        {
            if (string.IsNullOrEmpty(str))
            {
                return(new string[0]);
            }

            #region 检查参数

            if (left == null)
            {
                throw new ArgumentNullException("left");
            }

            if (left.Length == 0)
            {
                throw ExceptionHelper.EmptyString("left");
            }

            if (right == null)
            {
                throw new ArgumentNullException("right");
            }

            if (right.Length == 0)
            {
                throw ExceptionHelper.EmptyString("right");
            }

            if (startIndex < 0)
            {
                throw ExceptionHelper.CanNotBeLess("startIndex", 0);
            }

            if (startIndex >= str.Length)
            {
                throw new ArgumentOutOfRangeException("startIndex",
                                                      Resources.ArgumentOutOfRangeException_StringHelper_MoreLengthString);
            }

            #endregion

            int           currentStartIndex = startIndex;
            List <string> strings           = new List <string>();

            while (true)
            {
                // 找字符串开始位置左边。
                int leftPosBegin = str.IndexOf(left, currentStartIndex, comparsion);

                if (leftPosBegin == -1)
                {
                    break;
                }

                // 计算字符串左端位置。
                int leftPosEnd = leftPosBegin + left.Length;

                // 开始寻找位置法行。
                int rightPos = str.IndexOf(right, leftPosEnd, comparsion);

                if (rightPos == -1)
                {
                    break;
                }

                // 计算字符串长度所得。
                int length = rightPos - leftPosEnd;

                strings.Add(str.Substring(leftPosEnd, length));

                // 计算规则字符串结束位置。
                currentStartIndex = rightPos + right.Length;
            }

            return(strings.ToArray());
        }
Exemple #10
0
        /// <summary>
        /// 提取字符串中的最后一行。给定字符串中寻找两者之间从预定位置。
        /// </summary>
        /// <param name="str">将字符串中搜索过去。</param>
        /// <param name="left">行,左侧显示未知字符串。</param>
        /// <param name="right">行,位于右边的未知字符串。</param>
        /// <param name="startIndex">立场,开始查找字符串。从读0.</param>
        /// <param name="comparsion">枚举值之一,定义规则搜索。</param>
        /// <returns>已知字符串或空字符串。</returns>
        /// <exception cref="System.ArgumentNullException">参数值<paramref name="left"/> 或<paramref name="right"/> 等于<see langword="null"/>.</exception>
        /// <exception cref="System.ArgumentException">参数值<paramref name="left"/> 或<paramref name="right"/> 是空字符串。</exception>
        /// <exception cref="System.ArgumentOutOfRangeException">
        /// 参数值<paramref name="startIndex"/> 少0.
        /// -或-
        /// 参数值<paramref name="startIndex"/> 等于或大于字符串长度<paramref name="str"/>.
        /// </exception>
        public static string LastSubstring(this string str, string left, string right,
                                           int startIndex, StringComparison comparsion = StringComparison.Ordinal)
        {
            if (string.IsNullOrEmpty(str))
            {
                return(string.Empty);
            }

            #region 检查参数

            if (left == null)
            {
                throw new ArgumentNullException("left");
            }

            if (left.Length == 0)
            {
                throw ExceptionHelper.EmptyString("left");
            }

            if (right == null)
            {
                throw new ArgumentNullException("right");
            }

            if (right.Length == 0)
            {
                throw ExceptionHelper.EmptyString("right");
            }

            if (startIndex < 0)
            {
                throw ExceptionHelper.CanNotBeLess("startIndex", 0);
            }

            if (startIndex >= str.Length)
            {
                throw new ArgumentOutOfRangeException("startIndex",
                                                      Resources.ArgumentOutOfRangeException_StringHelper_MoreLengthString);
            }

            #endregion

            // 找字符串开始位置左边。
            int leftPosBegin = str.LastIndexOf(left, startIndex, comparsion);

            if (leftPosBegin == -1)
            {
                return(string.Empty);
            }

            // 计算字符串左端位置。
            int leftPosEnd = leftPosBegin + left.Length;

            // 找字符串开始位置规则。
            int rightPos = str.IndexOf(right, leftPosEnd, comparsion);

            if (rightPos == -1)
            {
                if (leftPosBegin == 0)
                {
                    return(string.Empty);
                }
                else
                {
                    return(LastSubstring(str, left, right, leftPosBegin - 1, comparsion));
                }
            }

            // 计算字符串长度所得。
            int length = rightPos - leftPosEnd;

            return(str.Substring(leftPosEnd, length));
        }