static int Main(string[] args) { if (args.Length != 1) { Console.WriteLine("Usage: NodaTime.NzdPrinter <path/url to nzd file>"); return(1); } var stream = new MemoryStream(FileUtility.LoadFileOrUrl(args[0])); int version = new BinaryReader(stream).ReadInt32(); Console.WriteLine($"File format version: {version}"); string[] stringPool = null; // Will be populated before it's used... foreach (var field in TzdbStreamField.ReadFields(stream)) { Console.WriteLine($"Field: {field.Id}"); var reader = new DateTimeZoneReader(field.CreateStream(), stringPool); switch (field.Id) { case StringPool: stringPool = ReadStringPool(reader); break; case TzdbStreamFieldId.TimeZone: ReadTimeZone(reader); break; case TzdbVersion: Console.WriteLine($"TZDB version: {reader.ReadString()}"); break; case TzdbIdMap: ReadMap(reader); break; case CldrSupplementalWindowsZones: ReadWindowsZones(reader); break; case WindowsAdditionalStandardNameToIdMapping: ReadMap(reader); break; case ZoneLocations: ReadZoneLocations(reader); break; case Zone1970Locations: ReadZone1970Locations(reader); break; } Console.WriteLine(); } return(0); }
public void InsufficientData() { var stream = new MemoryStream(); var writer = new DateTimeZoneWriter(stream, null); writer.WriteByte(1); writer.WriteCount(10); stream.Position = 0; var iterator = TzdbStreamField.ReadFields(stream).GetEnumerator(); Assert.Throws <InvalidNodaDataException>(() => iterator.MoveNext()); }