/// <summary> /// </summary> /// <param name="path"></param> public void ReadFile(string path) { logger.InternalDebug("Opening file: \"{0}\"", path); var reader = TargetSpecificUtil.StreamReader.Do(path, Encoding) as StreamReader; // StreamReader reader = new StreamReader(path, Encoding.UTF8); lastReadAction = LastReadAction.NONE; var nLine = 0; logger.InternalDebug("Reading file: \"{0}\"", path); Read(reader, 0, ref nLine); logger.InternalDebug("File read: \"{0}\", {1} line(s)", path, nLine); reader.Dispose(); }
/// <exception cref="CorruptFileException"></exception> private void Read(StreamReader reader, int level, ref int nLine) { while (!reader.EndOfStream) { var line = reader.ReadLine(); nLine++; if (line.Contains(Comment)) { line = line.Remove(line.IndexOf(Comment)); } line = line.Replace(Tab, string.Empty); var oldline = line; line = line.Replace(Space, string.Empty); if (line == string.Empty) { continue; } if (lastReadAction == LastReadAction.NEWNODE && line != NodeBegin) { throw new CorruptFileException(nLine); } if (line == NodeBegin) { if (lastReadAction != LastReadAction.NEWNODE) { throw new CorruptFileException(nLine); } nodes.Last().node.Read(reader, level + 1, ref nLine); lastReadAction = LastReadAction.STARTNODE; } else if (line == NodeEnd) { if (level == 0) { throw new CorruptFileException(nLine); } lastReadAction = LastReadAction.ENDNODE; return; } else if (line.ToCharArray().Contains(ValueIs)) { var splitIndex = oldline.IndexOf(ValueIs); var key = oldline.Substring(0, splitIndex); var value = oldline.Substring(splitIndex + 1); while (key.EndsWith(Space)) { key = key.Remove(key.Length - 1); } while (value.StartsWith(Space)) { value = value.Remove(0, 1); } if (key == "" || value == "") { throw new CorruptFileException(nLine); } logger.InternalDebug("In node \"{0}\": new item \"{1}\" = {2}", Name, key, value); items.Add(key, value); lastReadAction = LastReadAction.ITEM; } else { logger.InternalDebug("In node \"{0}\": new child node \"{1}\"", Name, line); nodes.Add(line, new SerializeNode(this, line)); lastReadAction = LastReadAction.NEWNODE; } } if (level != 0) { throw new CorruptFileException(nLine); } }