コード例 #1
0
        /// <summary>
        /// Zip Extracts the file to a string
        /// SC Alpha 2.2: Have to find the new one in E:\G\StarCitizen\StarCitizen\Public\Data\DataXML.pak (contains the binary XML now)
        /// </summary>
        static private String ExtractDefaultBinProfile(String defaultProfileName)
        {
            log.Debug("ExtractDefaultBinProfile - Entry");

            String retVal = "";

            if (File.Exists(SCPath.SCDataXML_pak))
            {
                using (ZipFile zip = ZipFile.Read(SCPath.SCDataXML_pak)) {
                    zip.CaseSensitiveRetrieval = false;
                    try {
                        ICollection <ZipEntry> gdpak = zip.SelectEntries("name = " + "'" + defaultProfileName + "'", SCPath.DefaultProfilePath_rel);
                        if (gdpak != null)
                        {
                            try {
                                MemoryStream mst = new MemoryStream( );
                                gdpak.FirstOrDefault( ).Extract(mst);
                                // use the binary XML reader
                                CryXmlNodeRef           ROOT       = null;
                                CryXmlBinReader.EResult readResult = CryXmlBinReader.EResult.Error;
                                CryXmlBinReader         cbr        = new CryXmlBinReader( );

                                ROOT = cbr.LoadFromBuffer(mst.ToArray( ), out readResult);
                                if (readResult == CryXmlBinReader.EResult.Success)
                                {
                                    XmlTree tree = new XmlTree( );
                                    tree.BuildXML(ROOT);
                                    retVal = tree.XML_string;
                                }
                                else
                                {
                                    log.ErrorFormat("  Error in CryXmlBinReader: {0}", cbr.GetErrorDescription());
                                    retVal = ""; // clear any remanents
                                }
                            }
                            catch {
                                retVal = ""; // clear any remanents
                            }
                        }
                    }
                    catch (Exception ex) {
                        log.Error("  Unexpected ", ex);
                    }
                }
            }
            return(retVal);
        }