private FileV8Tree GetDescriptionTree(FileV8Reader fileV8Reader, V8FileSystem fileSystem, string folderName, string fileName) { if (String.IsNullOrEmpty(folderName)) { var file = fileV8Reader.FindFileSystemReferenceByFileHeaderName(fileSystem.References, fileName); if (file == null) { RaiseFileNotExistsException(fileName); } using (MemoryStream stream = new MemoryStream()) { fileV8Reader.ReadV8FileRawData(stream, file); return(fileV8Reader.ParseV8File(stream, fileName)); } } else { var folder = fileV8Reader.FindFileSystemReferenceByFileHeaderName(fileSystem.References, folderName); if (folder == null) { RaiseFileNotExistsException(folderName); } using (MemoryStream stream = new MemoryStream()) { fileV8Reader.ReadV8FileRawData(stream, folder); if (fileV8Reader.IsV8FileSystem(stream)) { stream.Seek(0, SeekOrigin.Begin); using (FileV8Reader tmpV8Reader = new FileV8Reader(new BinaryReader(stream, Encoding.Default, true))) { folder.Folder = tmpV8Reader.ReadV8FileSystem(false); return(GetDescriptionTree(tmpV8Reader, folder.Folder, String.Empty, fileName)); } } else { RaiseItIsNotV8FolderException(folderName); } } } return(null); }