Beispiel #1
0
        public static Manifest Load([NotNull] Stream stream, [NotNull] ManifestFormat format)
        {
            #region Sanity checks
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }
            if (format == null)
            {
                throw new ArgumentNullException("format");
            }
            #endregion

            var nodes = new List <ManifestNode>();

            var reader = new StreamReader(stream);
            while (!reader.EndOfStream)
            {
                // Parse each line as a node
                string line = reader.ReadLine() ?? "";
                if (line.StartsWith("F"))
                {
                    nodes.Add(ManifestNormalFile.FromString(line));
                }
                else if (line.StartsWith("X"))
                {
                    nodes.Add(ManifestExecutableFile.FromString(line));
                }
                else if (line.StartsWith("S"))
                {
                    nodes.Add(ManifestSymlink.FromString(line));
                }
                else if (line.StartsWith("D"))
                {
                    nodes.Add(format.ReadDirectoryNodeFromEntry(line));
                }
                else
                {
                    throw new FormatException(Resources.InvalidLinesInManifest);
                }
            }

            return(new Manifest(format, nodes));
        }