Esempio n. 1
0
    /// <summary>
    /// 更新本地版本信息
    /// </summary>
    /// <param name="ab">Ab.</param>
    public static void SyncVersion(List <string> abs)
    {
        // 遍历需要更新的ab信息
        foreach (string ab in abs)
        {
            // 新版树中没有该版本信息
            CsvRow data = mNewVersionCsv.FindByKey(ab);
            if (data == null)
            {
                return;
            }

            // 修正本地版本信息
            CsvRow oldData = mVersionCsv.FindByKey(ab);

            // 如果是新增资源
            if (oldData == null)
            {
                // 构建一列数据
                CsvRow row = new CsvRow(mNewVersionCsv);
                row.Add("bundle", data.Query <LPCValue>("bundle"));
                row.Add("md5", data.Query <LPCValue>("md5"));
                row.Add("patch", data.Query <LPCValue>("patch"));
                row.Add("unzip_size", data.Query <LPCValue>("unzip_size"));
                row.Add("zip_size", data.Query <LPCValue>("zip_size"));

                // 添加新数据
                mVersionCsv.AddNewRow(row);
            }
            else
            {
                oldData.Add("md5", data.Query <LPCValue>("md5"));
                oldData.Add("patch", data.Query <LPCValue>("patch"));
                oldData.Add("unzip_size", data.Query <LPCValue>("unzip_size"));
                oldData.Add("zip_size", data.Query <LPCValue>("zip_size"));
            }
        }

        // 序列化
        MemoryStream ms = new MemoryStream();

        CsvFileMgr.Serialize(ms, mVersionCsv);

        // 版本文件存放路径
        string     versionFilePath = string.Format("{0}/{1}.bytes", ConfigMgr.ASSETBUNDLES_PATH, VERSION_NAME);
        FileStream fs = new FileStream(versionFilePath, FileMode.Create, FileAccess.Write);

        fs.Write(ms.GetBuffer(), 0, (int)ms.Length);
        fs.Close();
    }
Esempio n. 2
0
    /// <summary>
    /// 序列化csv文件操作.
    /// </summary>
    public static void Save(string filePath, bool checkValid, string dir)
    {
        CsvFile csv = new CsvFile(System.IO.Path.GetFileNameWithoutExtension(filePath));

        string[] lines = FileMgr.ReadLines(filePath);
        if (lines.Length == 0)
        {
            NIDebug.Log("空文件 {0}", lines);
            return;
        }

        // 解析csv文件
        CsvParser cp = new CsvParser();
        LPCValue  m;

        try
        {
            cp.Load(filePath, checkValid);
            if (cp.Fields.Count == 0 || cp.Records.Count == 0)
            {
                return;
            }
            m = ImportMgr.Read(cp);
        }
        catch (Exception e)
        {
            NIDebug.Log("读取csv错误 {0}\n{1}", filePath, e.ToString());
            return;
        }

        // 主key
        csv.primaryKey = cp.PrimaryKey;

        // 列名字对应的索引
        for (int i = 0; i < cp.Fields.Count; i++)
        {
            csv.columns.Add(cp.Fields[i].name, i);
        }

        // 每列值
        csv.rows = new CsvRow[m.AsArray.Count];
        for (int i = 0; i < m.AsArray.Count; i++)
        {
            LPCValue v   = m.AsArray[i];
            CsvRow   row = new CsvRow(csv);
            for (int idx = 0; idx < cp.Fields.Count; idx++)
            {
                row.Add(idx, v.AsMapping[cp.Fields[idx].name]);
            }

            csv.AddRow(i, row);
        }

        // 序列化
        MemoryStream ms = new MemoryStream();

        CsvFileMgr.Serialize(ms, csv);

        // 写入数据
        string fileName = System.IO.Path.GetFileNameWithoutExtension(filePath);

        // 确保路径存在
        Directory.CreateDirectory(dir);

        FileStream fs = new FileStream(dir + "/" + fileName + CSV_EXT, FileMode.Create, FileAccess.Write);

        fs.Write(ms.GetBuffer(), 0, (int)ms.Length);
        fs.Close();
    }