ExtensionsMethods.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using System;
  2. using System.Globalization;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. namespace IsoFilePatcher.Iso9660
  7. {
  8. internal static class ExtensionsMethods
  9. {
  10. public static string ReadString(this BinaryReader br, int len, Encoding encoding = null)
  11. {
  12. var buf = br.ReadBytes(len);
  13. return (encoding ?? Encoding.ASCII).GetString(buf);
  14. }
  15. public static uint ReadUInt32LsbMsb(this BinaryReader br)
  16. {
  17. var a = br.ReadUInt32();
  18. var b = br.ReadUInt32();
  19. return BitConverter.IsLittleEndian ? a : b;
  20. }
  21. public static ushort ReadUInt16LsbMsb(this BinaryReader br)
  22. {
  23. var a = br.ReadUInt16();
  24. var b = br.ReadUInt16();
  25. return BitConverter.IsLittleEndian ? a : b;
  26. }
  27. public static DateTime ReadDecDateTime(this BinaryReader br)
  28. {
  29. var str = br.ReadString(16);
  30. var tz = br.ReadByte();
  31. if (str[0] == '\0' || str.All(p => p == '0')) return new DateTime();
  32. var dt = DateTime.ParseExact(str, "yyyyMMddHHmmssff", CultureInfo.InvariantCulture);
  33. return dt;
  34. }
  35. public static DateTime ReadFileRecordDate(this BinaryReader br)
  36. {
  37. var year = br.ReadByte();
  38. var mon = br.ReadByte();
  39. var day = br.ReadByte();
  40. var hour = br.ReadByte();
  41. var min = br.ReadByte();
  42. var sec = br.ReadByte();
  43. var tz = br.ReadByte();
  44. var dt = new DateTime(year + 1900, mon, day, hour, min, sec);
  45. return dt;
  46. }
  47. public static string ReadBytePrefixString(this BinaryReader br, Encoding encoding = null)
  48. {
  49. return (encoding ?? Encoding.ASCII).GetString(br.ReadBytes(br.ReadByte()));
  50. }
  51. }
  52. }