Bencode рд╕реЗ XML рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░!
рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рдмрд╛рдЗрдирд░реАрдХреЛрдб рдореЗрдВ рдПрдХ XML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЪрд▓реЛ C # рд▓реЗ рд▓реЛред
(рд╣рд╛рдВ, рд╣рдо рдПрдХ рд╕рд╛рдЗрдХрд┐рд▓ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдХреНрдпреЛрдВ рд╣реИ? рдпрджрд┐ рдЖрдк рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЧреИрд░-рдорд╛рдирдХ рд▓реЛрдЧ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ)

Bencodeред рдЬреИрд╕рд╛ рд╡рд╣ рд╣реИ



So. рдЖрдЗрдП рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдмреЗрдирдХреЛрдб рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ:
рдЗрд╕рдореЗрдВ 4 рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ)
  1. рдмрд╛рдЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ
  2. рдкреВрд░реНрдгрд╛рдВрдХ
  3. рд╕реВрдЪреА
  4. рд╢рдмреНрджрдХреЛрд╢

рд╕реАрдорд╛рдВрдХрдХ рдХреЗ рд░реВрдк рдореЗрдВ, Bencode ASCII рд╡рд░реНрдгреЛрдВ рдФрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рд╕рдорд╛рд╣рд┐рдд рд╣реИ?
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕рд░рд▓ рдФрд░ рдЬрдЯрд┐рд▓ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░:
1) рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрд╛рдЗрдЯреНрд╕ - рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ (рд╕рдВрдЦреНрдпрд╛) рд╣реЛ, рдлрд┐рд░ рдХреЛрд▓рди рд╕рд╛рдЗрди (":") рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: 5: рд╣реИрд▓реЛ рдпрд╛ 12: рд╣реИрд▓реЛ, рд╣рдмрд▓!
2) рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ - рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ: рдкреНрд░рддреАрдХ "рдореИрдВ" (рдкреВрд░реНрдгрд╛рдВрдХ), рд╕рдВрдЦреНрдпрд╛, рдкреНрд░рддреАрдХ "рдИ" (рдЕрдВрдд)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: i9e рдпрд╛ i199eред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдкреНрд░рдХрд╛рд░ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ "рд╕рдорд░реНрдерди" рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП i-9e (-9) рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ

рдЬрдЯрд┐рд▓ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ (рд╕рд░рд▓ рдФрд░ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдорд┐рд▓рдХрд░):
1) рд╕реВрдЪреА - (рдЙрд░реНрдл рдПрдХ рд╕рд░рдгреА) - рдЗрд╕рдореЗрдВ рдЕрдиреНрдп рдмреЗрдирдХреЛрдб рдкреНрд░рдХрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╡рд┐рдзрд┐ рдкреНрд░рддреАрдХ "рдПрд▓" (рд╕реВрдЪреА), рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг, рдкреНрд░рддреАрдХ "рдИ" рд╣реИред рдЙрджрд╛рд╣рд░рдг: l1: I3: You2: Wee ["I", "You", "We"]
2) рд╢рдмреНрджрдХреЛрд╢ - (рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгреА) - рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдФрд░ рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдореЗрд╢рд╛ рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдбреЗрдЯрд╛ рдХреЛ "рдХреБрдВрдЬреА" рдлрд╝реАрд▓реНрдб рджреНрд╡рд╛рд░рд╛ рд▓реЗрдХреНрд╕реЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рдХреНрд░рдо рдореЗрдВ рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рдмреНрджрдХреЛрд╢ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдкреНрд░рддреАрдХ "рдбреА" (рд╢рдмреНрджрдХреЛрд╢), рдХреБрдВрдЬреА-рдореВрд▓реНрдп рддрддреНрд╡, рдкреНрд░рддреАрдХ "рдИ"ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП d5: Alpha4: Beta10: filesCounti9ee ["рдЕрд▓реНрдлрд╛" - "рдмреАрдЯрд╛", "filesCount" - 9]

BEncode рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?


рдмреЗрдирдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдорд╛рд░реА рд╕рднреА рдкрд╕рдВрджреАрджрд╛ .torrent рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреЗ рдлрд╛рдЗрд▓реЗрдВ рдПрдХ рд╕рд╣рдпреЛрдЧреА рд╕рд░рдгреА (рд╢рдмреНрджрдХреЛрд╢) рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИрдВред
рд╣рдо рдЙрдкрдХрд░рдг .torrent рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рдирд╣реАрдВ рд░реБрдХреЗрдВрдЧреЗред

рд╣рдо рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддреЗ рд╣реИрдВ


рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, "рдЕрд▓рдорд╛рд░рд┐рдпреЛрдВ рдкрд░ рдмрд╛рд╣рд░ рдмрд┐рдЫрд╛рдиреЗ" рдХреЗ рд▓рд┐рдП рдХрдИ рдХрдХреНрд╖рд╛рдПрдВ рд╣реЛрдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╕рд░рд▓ рддрддреНрд╡реЛрдВ (рдмреАрдЗрдЯреЗрдо) рдХрд╛ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВрдЧреЗ (рдпрд╣ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЛрдиреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛, рдлрд┐рд░ рд╣рдо рдПрдХ рд╕реВрдЪреА рд╡рд░реНрдЧ (BList) рдФрд░ рдлрд┐рд░ рдПрдХ рд╡рд░реНрдЧ - рдПрдХ рд╢рдмреНрджрдХреЛрд╢ (BDEDIA)) рдмрдирд╛рдПрдВрдЧреЗред
рдЪреВрдВрдХрд┐ рдмреАрдПрдирдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рд╣рдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рддрддреНрд╡ рдПрдХ рджреВрд╕рд░реЗ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдПрдХ рд╡рд░реНрдЧ (рдмреАрд▓реАрдореЗрдВрдЯ) рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рддрддреНрд╡реЛрдВ рдФрд░ рд╕реВрдЪреА рдХреЗ рд╕рднреА рд╡рд░реНрдЧреЛрдВ, рд╢рдмреНрджрдХреЛрд╢ рдФрд░ рд╕рд░рд▓ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдПрдХ рд╕рдордЧреНрд░ рд╡рд░реНрдЧ рдорд┐рд▓рддрд╛ рд╣реИред
рдФрд░ рдЕрдВрддрд┐рдо 5 рд╡реАрдВ рдХрдХреНрд╖рд╛ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧреАред
рд░реЗрдЦрд╛рдВрдХрди, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


рдлрд╛рдЗрд▓ рдПрдирдХреЛрдбрд┐рдВрдЧ рдкрдврд╝реЗрдВ



BItem рд╡рд░реНрдЧ рдореЗрдВ рд╣реИ


/// <summary> /// integer value /// start - 'i' /// end - 'e' /// Example - i145e => 145 /// string value /// start - length /// end - /// Example 5:hello => "hello" /// </summary> public class BItem { protected string strValue = ""; protected int intValue = 0; protected bool IsInt = true; public bool isInt { get { return IsInt; } } public BItem(string A) { strValue = A; IsInt = false; } public BItem(int A) { IsInt = true; intValue = A; } public string ToString() { if (IsInt) return intValue.ToString(); return strValue; } } 


BList рд╡рд░реНрдЧ рдореЗрдВ рд╣реИ


  /// <summary> /// List /// start - 'l' /// end - 'e' /// Example - l5:helloi145e => ("hello",145) /// </summary> public class BList { List<BElement> Items = null; public BList() { Items = new List<BElement>(); } public BElement this[int index] { get { if (Items.Count > index) { return Items[index]; } return new BElement(); } set { if (Items.Count > index) { Items[index] = value; } else { throw new Exception("   .   !"); } } } public int Count { get { return Items.Count; } } /// <summary> ///     /// </summary> public void Add(BElement inf) { Items.Add(inf); } } 


BDEDIA рд╡рд░реНрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ

  /// <summary> /// Dictionary /// start - 'd' /// end - 'e' /// Example - d2:hi7:goodbyee => ("hi" => "goodbye") /// </summary> public class BDictionary { protected List<BElement> FirstItem = null; protected List<BElement> SecondItem = null; public BDictionary() { FirstItem = new List<BElement>(); SecondItem = new List<BElement>(); } public int Count{ get { return FirstItem.Count; } } /// <summary> ///  /// </summary> /// <param name="index"></param> /// <returns></returns> public BElement[] this[int index] { get{ if (FirstItem.Count > index) { BElement[] Items = new BElement[2]; Items[0] = FirstItem[index]; Items[1] = SecondItem[index]; return Items; } return new BElement[2]; } set{ if (FirstItem.Count > index) { FirstItem[index] = value[0]; SecondItem[index] = value[1]; } else { //FirstItem.Add(value[0]); // SecondItem.Add(value[1]); -    , ..    !!!!!     throw new Exception("   .   "); } } } /// <summary> ///    /// </summary> /// <param name="First"></param> /// <param name="Second"></param> public void Add(BElement First, BElement Second) { FirstItem.Add(First); SecondItem.Add(Second); } } 


рдЕрдм рд╣рдо "рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ" рд╡рд░реНрдЧ рдмреАрдИрд▓рдореЗрдВрдЯ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
рдмреАрдЗрд▓рдореЗрдВрдЯ рд╡рд░реНрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ


  /// <summary> /// ""  /// </summary> public class BElement { public BItem STDItem = null; public BList LSTItem = null; public BDictionary DICItem = null; /// <summary> ///       string\integer /// </summary> /// <param name="Reader"> </param> /// <param name="CurrentCode">  </param> public void AddToBItem(StreamReader Reader, char CurrentCode) { char C; if (CurrentCode == 'i') {//  string Value= ""; C = (char)Reader.Read(); while (C != 'e') {// Value += C; C = (char)Reader.Read(); } try { int Res = Int32.Parse(Value); STDItem = new BItem(Res); } catch (Exception ex) { //   throw .     null' STDItem = null; } return; } int length = (int)CurrentCode - (int)'0'; C = (char)Reader.Read(); while (C != ':' && (C>='0' && C<='9')) { length = length * 10 + (int)C - (int)'0'; C = (char)Reader.Read(); } if (C!= ':') {//   (   ,   ,  throw new Exception("  "); //     throw     ...      =) STDItem = null; return; } string value = ""; for (int CurrentCount = 0; CurrentCount < length; CurrentCount++) { value += (char)Reader.Read(); } STDItem = new BItem(value); } /// <summary> /// . ,  l   /// </summary> /// <param name="Reader"> </param> public void AddToBList(StreamReader Reader) { LSTItem = new BList(); BElement Temp = GetNewBElement(Reader); while (Temp != null) { LSTItem.Add(Temp); Temp = GetNewBElement(Reader); } if (LSTItem.Count == 0) LSTItem = null;//  -        . } /// <summary> ///   /// </summary> /// <param name="Reader">  </param> public void AddToBDic(StreamReader Reader) { DICItem = new BDictionary(); BElement FirstTemp = GetNewBElement(Reader); BElement SecondTemp = GetNewBElement(Reader); while (FirstTemp != null || SecondTemp != null) { DICItem.Add(FirstTemp, SecondTemp); FirstTemp = GetNewBElement(Reader); SecondTemp = GetNewBElement(Reader); } if (DICItem.Count == 0) DICItem = null;//       } /// <summary> ///    .   /// </summary> /// <param name="Reader"> </param> /// <returns> </returns> public static BElement GetNewBElement(StreamReader Reader) { char C = (char)Reader.Read(); switch (C) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'i': {//   BElement STDElement = new BElement(); STDElement.AddToBItem(Reader, C); return STDElement; } case 'l': {// BElement LSTElement = new BElement(); LSTElement.AddToBList(Reader); return LSTElement; } case 'd': {// BElement DICElement = new BElement(); DICElement.AddToBDic(Reader); return DICElement; } default://("e") return null; } } } 


рдЕрдВрддрд┐рдо рд╡рд░реНрдЧ, рд╣рдорд╛рд░реА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ "рджрд┐рд▓" - рдлрд╛рдЗрд▓рдмреИрдХрдирдХреЛрдбрд┐рдВрдЧ
рдпрд╣ BEncode \ XML рд▓реЗрдЦрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ред

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрдврд╝рдиреЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ:


  public class FileBEncoding { List<BElement> BenItems;//      ,   BElement BenItem BElement this[int index] { get { if (BenItems.Count > index) return BenItems[index]; return null; } set { if (BenItems.Count > index) { BenItems[index] = value; } else throw new Exception("  .   "); } } public FileBEncoding(string Path) { if (!File.Exists(Path)) return; BenItems = new List<BElement>(); StreamReader Reader = new StreamReader(Path, Encoding.ASCII); while (!Reader.EndOfStream) { BElement temp = BElement.GetNewBElement(Reader); if (temp != null) BenItems.Add(temp); } Reader.Close(); } 


рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реЗрдЦрд╛ рдЖрдЙрдЯрдкреБрдЯ



рдпрджрд┐ рдЖрдк xml рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рднрд╛рдЧ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдореИрдВ рдПрдХ "рд╕рдВрд░рдЪрд┐рдд" рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдлрд╝рд╛рдЗрд▓ \ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреЗрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП?
C # рдХреА рд╕рднреА рдХрдХреНрд╖рд╛рдПрдВ рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рд▓реА рдЧрдИ рд╣реИрдВред рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ ToString () рд╡рд┐рдзрд┐ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рд╡рд┐рдзрд┐ рдкреНрд░рдХрд╛рд░ рдирд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИред рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред

  private string BElementToSTR(BElement CurrentElement, int TabCount, bool Ignore = true) { //     if (CurrentElement == null) return "";//    ,       . string Result = "";//  if (Ignore)//      PasteTab(ref Result, TabCount); if (CurrentElement.STDItem != null) { Result += CurrentElement.STDItem.ToString(); return Result; } if (CurrentElement.LSTItem != null) {//  Result += "List{\n"; for (int i = 0; i < CurrentElement.LSTItem.Count; i++) Result += BElementToSTR(CurrentElement.LSTItem[i], TabCount + 1) + '\n'; PasteTab(ref Result, TabCount); Result += "}List\n"; return Result; } if (CurrentElement.DICItem != null) {//  Result += "Dict{\n"; for (int i = 0; i < CurrentElement.DICItem.Count; i++) { Result += BElementToSTR(CurrentElement.DICItem[i][0], TabCount + 1) +" => "+ BElementToSTR(CurrentElement.DICItem[i][1], TabCount+1,false) + '\n'; } PasteTab(ref Result, TabCount); Result += "}Dict\n"; return Result; } return "";//   null,     } private string PasteTab(ref string STR,int count) {// for (int i = 0; i < count; i++) STR += '\t'; return STR; } public string ToString() { string Result = ""; for (int i = 0; i < BenItems.Count; i++) { Result += BElementToSTR(BenItems[i], 0) + "\n\n"; } return Result; } 


рдпрд╣рд╛рдВ рд╣рдордиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд 2 рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдПрдХ рдПрдХрд▓ BElement рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ (рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╣реИ), рджреВрд╕рд░рд╛ - рдЗрдВрдбреЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред

рдПрдХ XML рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ



рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдХреЛрдбрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░реЗрдВ, рдореИрдВ XML рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж рдХрд╣рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдЗрд╕ рднрд╛рд╖рд╛ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕реВрдЪрдирд╛-рд╡рд┐рдирд┐рдордп рдХреА рдПрдХрд▓ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред C # (рдпрд╛ рдмрд▓реНрдХрд┐, .NET рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо) рдЙрддреНрдХреГрд╖реНрдЯ XML рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрд╛рдо рдХреЗ рд▓рд┐рдП, рд╣рдо System.XML рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

XML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рдореЗрд░реА рдкрд╕рдВрдж XmlWriter рд╡рд░реНрдЧ рдкрд░ рдЧрд┐рд░ рдЧрдИред рдпрд╣ рд╡рд░реНрдЧ рдЖрдкрдХреЛ рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ "рдЦрд░реЛрдВрдЪ рд╕реЗред" рдФрд░ рдХреНрд░рдо рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдореБрдЦреНрдп рд▓рд╛рдн рдЗрд╕рдХреА рдЙрдЪреНрдЪ рдЧрддрд┐ рд╣реИред

рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ рддрд░реАрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
рд╢реВрдиреНрдп ToXMLFile (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрде) рдФрд░ рд╢реВрдиреНрдп BElementToXML (BElement рдХрд░рдВрдЯ, XmlWriter рд▓реЗрдЦрдХ, рдЗрдВрдЯ рдСрд░реНрдбрд░ = 0)
рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдЖрд╡рд╢реНрдпрдХ XmlWriter рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдЧреА рдФрд░ рд╕реВрдЪреА рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП BElementToXML рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧреАред
рджреВрд╕рд░реА рд╡рд┐рдзрд┐ "рдЕрдиреБрдкрдЪрд╛рд░рд┐рдд" BElement рдореЗрдВ рд▓рдЧреА рд╣реБрдИ рд╣реИ (рдпрджрд┐ рдпрд╣ рдПрдХ рд╕реВрдЪреА \ рдбрд┐рдХреНрд╢рдирд░реА рд╣реИ) рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред

  private void BElementToXML(BElement Current, XmlWriter Writer, int order = 0) { if (Current == null) return;//    if (Current.STDItem != null) {//     Writer.WriteAttributeString("STDType"+'_'+order.ToString(), Current.STDItem.ToString()); return; } if (Current.LSTItem != null) {// Writer.WriteStartElement("List");//    <List> for (int i = 0; i < Current.LSTItem.Count; i++) BElementToXML(Current.LSTItem[i],Writer,order);//  Writer.WriteEndElement();//  </List> return; } if (Current.DICItem != null) {// ( ) Writer.WriteStartElement("Dictionary"); for (int i = 0; i < Current.DICItem.Count; i++) { Writer.WriteStartElement("Dictionary_Items"); BElementToXML(Current.DICItem[i][0], Writer,order); BElementToXML(Current.DICItem[i][1], Writer,order+1); Writer.WriteEndElement(); } Writer.WriteEndElement(); return; } return; } public void ToXMLFile(string path) { using (XmlTextWriter XMLwr = new XmlTextWriter(path, System.Text.Encoding.Unicode)) { XMLwr.Formatting = Formatting.Indented; XMLwr.WriteStartElement("Bencode_to_XML"); foreach (BElement X in BenItems) { XMLwr.WriteStartElement("BenItem"); BElementToXML(X, XMLwr); XMLwr.WriteEndElement(); } XMLwr.WriteEndElement(); } } 


рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ BEncode рдлрд╛рдЗрд▓ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рдорд┐рд▓рддреЗ рд╣реИрдВ:
(рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ ubuntu рдЯреЛрд░реЗрдВрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред SHA рдиреЗ рдЪрд╛рдмрд┐рдпрд╛рдБ рд╣рдЯрд╛ рджреАрдВред)

рдХрдВрд╕реЛрд▓: (ToString)


рдПрдХреНрд╕реЗрд▓: (xml)


рдирд┐рд╖реНрдХрд░реНрд╖



рдЗрд╕ рдЫреЛрдЯреЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рд╕рдмрдХ рд╕реАрдЦрд╛: рдмреАрдПрдирдХреЛрдб рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВ, рдПрдХ XML рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред
рдФрд░ BEncode рд╕реЗ XML рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, BEncode рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкрд╛рджрдХ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣рд╛рдБ рдХреЛрдб рдПрдХ рд╕рд╛рде рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ

рд╕рд╛рд╣рд┐рддреНрдп

Source: https://habr.com/ru/post/In147990/


All Articles