Exemplo n.º 1
0
        private void GenerateReadWriteList()
        {
            string file       = PathUtil.GetCombinePath(m_ResourceManager.ReadWritePath, PathUtil.GetResourceNameWithSuffix(ResourceListFileName));
            string backupFile = null;

            if (File.Exists(file))
            {
                backupFile = file + BackupFileSuffixName;
                if (File.Exists(backupFile))
                {
                    File.Delete(backupFile);
                }

                File.Move(file, backupFile);
            }


            try
            {
                using (FileStream fileStream = new FileStream(file, FileMode.CreateNew, FileAccess.Write))
                {
                    byte[] buffer = null;
                    using (MMO_MemoryStream ms = new MMO_MemoryStream())
                    {
                        ms.WriteInt(m_ResourceManager.ReadWriteResourceInfos.Count);
                        foreach (var readWriteResourceInfo in m_ResourceManager.ReadWriteResourceInfos)
                        {
                            int length   = readWriteResourceInfo.Value.Length;
                            int hashcode = readWriteResourceInfo.Value.HashCode;

                            ms.WriteUTF8String(readWriteResourceInfo.Key);
                            ms.WriteInt(length);
                            ms.WriteInt(hashcode);
                        }
                        buffer = ms.ToArray();
                    }
                    fileStream.Write(buffer, 0, buffer.Length);
                }

                if (!string.IsNullOrEmpty(backupFile))
                {
                    File.Delete(backupFile);
                }
            }
            catch (Exception exception)
            {
                if (File.Exists(file))
                {
                    File.Delete(file);
                }

                if (!string.IsNullOrEmpty(backupFile))
                {
                    File.Move(backupFile, file);
                }

                throw new Exception(TextUtil.Format("Pack save exception '{0}'.", exception.Message), exception);
            }
        }