FPKeyWords.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.IO;
  5. namespace System.Fire.FilePack.FilePackElements {
  6. public class FPKeyWords {
  7. // Aufbau Keyword Header:
  8. // 1 Byte Byte Anzahl Zeichen des Keyword Namens (1 Zeichen = 2 Byte)
  9. // 4 Byte ULong Offset(removed)
  10. // 8 Byte Long Length
  11. // 1 Byte Byte Type
  12. // 1 Byte Byte File Extention
  13. // n Byte String Keyword Name
  14. private string _Keyword;
  15. private long _Offset;
  16. private int _Length;
  17. private FilePackElements.DataType _Type;
  18. private byte _fileExt;
  19. private BinaryReader _Stream;
  20. /// <summary>Erstellt ein neues Keyword Element</summary>
  21. /// <param name="s">Der Stream Binary-Reader der das Archive geöffnet hat</param>
  22. public FPKeyWords(BinaryReader s) {
  23. this._Stream = s;
  24. byte KeyWordLength = s.ReadByte();
  25. this._Length = (int)s.ReadInt64();
  26. this._Type = (FilePackElements.DataType)s.ReadByte();
  27. this._fileExt = s.ReadByte();
  28. Encoding enc = System.Text.Encoding.UTF8;
  29. /*byte[] b = new byte[KeyWordLength - 1];
  30. for(int i = 0; i < KeyWordLength; i++)
  31. b[i] = s.ReadByte();*/
  32. byte[] b = s.ReadBytes(KeyWordLength);
  33. this._Keyword = enc.GetString(b);
  34. System.Diagnostics.Debug.WriteLine("Keyword: " + this._Keyword + "; Keyword len: " + KeyWordLength + "; DataLen: " + this._Length + "; Type: " + this._Type.ToString() + "; fileExt: " + this._fileExt);
  35. }
  36. public override string ToString() {
  37. return this._Keyword;
  38. }
  39. /// <summary>Gibt das Keyword des Eintrags zurück</summary>
  40. /// <returns>Gibt das Keyword des Eintrags als String zurück</returns>
  41. public string Keyword {
  42. get { return this._Keyword; }
  43. }
  44. /// <summary>
  45. /// Gibt den Offset des Eintrags in dem Archiv zurück oder legt ihn fest
  46. /// </summary>
  47. /// <value>Legt den Offset des Eintrags in dem Archiv fest</value>
  48. /// <returns>Gibt den Offset des Eintrags in dem Archiv als ULong zurück</returns>
  49. public long Offset {
  50. get { return this._Offset; }
  51. set { this._Offset = value; }
  52. }
  53. /// <summary>
  54. /// Gibt die ID der Dateiendung des Eintrags im Archiv als Byte zurück.
  55. /// </summary>
  56. /// <returns>Gibt die ID der Dateiendung des Eintrags im Archiv als Byte zurück.</returns>
  57. /// <remarks>Dies gilt nur, wenn im Archive die Dateiendungen gespeichert wurden</remarks>
  58. public byte FileExtension {
  59. get { return this._fileExt; }
  60. }
  61. /// <summary>
  62. /// Gibt den Typ des Eintrags zurück
  63. /// </summary>
  64. /// <returns>Gibt den Typ des Eintrags im FilePack.DataType zurück</returns>
  65. public FilePackElements.DataType Type {
  66. get { return this._Type; }
  67. }
  68. /// <summary>
  69. /// Gibt die Länge des Eintrags zurück
  70. /// </summary>
  71. /// <returns>Gibt die Länge des Eitnrags als Long zurück</returns>
  72. public long Length {
  73. get { return this._Length; }
  74. }
  75. /// <summary>Gib den Eintrag als Byte-Array zurück</summary>
  76. /// <returns>Gib den Eintrag als Byte-Array zurück</returns>
  77. public byte[] getBytes() {
  78. this._Stream.BaseStream.Seek(this._Offset, IO.SeekOrigin.Begin);
  79. return this._Stream.ReadBytes(this._Length);
  80. }
  81. /// <summary>Gib den Eintrag als Byte-Array zurück</summary>
  82. /// <returns>Gib den Eintrag als Byte-Array zurück</returns>
  83. /// <param name="StartIndex">Legt den Startindex fest, ab dem das auslesen begonnen werden soll</param>
  84. public byte[] getBytes(int StartIndex) {
  85. this._Stream.BaseStream.Seek(this._Offset + StartIndex, IO.SeekOrigin.Begin);
  86. return this._Stream.ReadBytes(this._Length - StartIndex);
  87. }
  88. /// <summary>Gib den Eintrag als Byte-Array zurück</summary>
  89. /// <returns>Gib den Eintrag als Byte-Array zurück</returns>
  90. /// <param name="StartIndex">Legt den Startindex fest, ab dem das auslesen begonnen werden soll</param>
  91. /// <param name="Length">Legt die Länge der auszulesenden Bytes fest</param>
  92. public byte[] getBytes(int StartIndex, int Length) {
  93. this._Stream.BaseStream.Seek(this._Offset + StartIndex, IO.SeekOrigin.Begin);
  94. int xLength = Length;
  95. if(this._Length > StartIndex + Length)
  96. xLength = this._Length - StartIndex;
  97. return this._Stream.ReadBytes(xLength);
  98. }
  99. /// <summary>Gib den Eintrag als String zurück</summary>
  100. /// <returns>Gib den Eintrag als String zurück</returns>
  101. public string getString() {
  102. this._Stream.BaseStream.Seek(this._Offset, IO.SeekOrigin.Begin);
  103. byte[] Buffer = new byte[this._Length];
  104. this._Stream.Read(Buffer, 0, this._Length);
  105. return Convert.ToBase64String(Buffer, Base64FormattingOptions.None);
  106. }
  107. /// <summary>Gib den Eintrag als String zurück</summary>
  108. /// <returns>Gib den Eintrag als String zurück</returns>
  109. /// <param name="StartIndex">Legt den Startindex fest, ab dem das auslesen begonnen werden soll</param>
  110. public string getString(int StartIndex) {
  111. this._Stream.BaseStream.Seek(this._Offset + StartIndex, IO.SeekOrigin.Begin);
  112. byte[] Buffer = new byte[this._Length - StartIndex];
  113. this._Stream.Read(Buffer, 0, this._Length - StartIndex);
  114. return Convert.ToBase64String(Buffer, Base64FormattingOptions.None);
  115. }
  116. /// <summary>Gib den Eintrag als String zurück</summary>
  117. /// <returns>Gib den Eintrag als String zurück</returns>
  118. /// <param name="StartIndex">Legt den Startindex fest, ab dem das auslesen begonnen werden soll</param>
  119. /// <param name="Length">Legt die Länge der auszulesenden Bytes fest</param>
  120. public string getString(int StartIndex, int Length) {
  121. int xLength = Length;
  122. if (this._Length > StartIndex + Length)
  123. xLength = this._Length - StartIndex;
  124. byte[] Buffer = new byte[xLength];
  125. this._Stream.BaseStream.Seek(this._Offset + StartIndex, IO.SeekOrigin.Begin);
  126. this._Stream.Read(Buffer, 0, xLength);
  127. return Convert.ToBase64String(Buffer, Base64FormattingOptions.None);
  128. }
  129. }
  130. }