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"; }
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()); }
/// <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"; }
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)); }
/// <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()); }
/// <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)); }
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()); }
/// <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()); }
/// <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)); }