Files
Main/Assets/Plugins/References/FuncellUpdate/UpdateModel/Data/MapFileManage.cs
2025-01-25 04:38:09 +08:00

116 lines
4.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.IO;
using Thousandto.Update.Log;
using Thousandto.Update.Flow;
namespace Thousandto.Update.Data
{
class MapFileManage
{
string _TAG = "MapFileManage.cs ";
List<MapFileData> _mapFileDataList = new List<MapFileData>();
string _saveDir;
public void setSaveDir(string saveDir)
{
_saveDir = saveDir;
}
public List<MapFileData> GetMapFileDataList()
{
return _mapFileDataList;
}
public int parseMapFile(string mapFile, string resUrl, string saveDir)
{
_saveDir = saveDir;
UpdateLog.INFO_LOG(_TAG + "parseMapFile(string mapFile, string resUrl):" + mapFile + "," + resUrl);
int ret = CodeDefine.RET_SUCCESS;
List<MapFileData> mapFileDataList = _mapFileDataList;
FileStream mapFileStream = null;
try
{
mapFileStream = new FileStream(mapFile, FileMode.Open);
long filePosition = 0;
long mapFileSize = mapFileStream.Length;
while (mapFileSize > 0 && filePosition != mapFileSize)
{
if (filePosition >= mapFileSize)
{
UpdateLog.ERROR_LOG("解析出错了");
return ret;
}
MapFileData mapFileData = new MapFileData();
mapFileData.Begin = parseInt(read(mapFileStream, 10, filePosition, out filePosition));
if (mapFileData.Begin == -1)
{
UpdateLog.WARN_LOG("解析map文件出现异常,请检查: " + mapFile);
return ret;
}
mapFileData.End = parseInt(read(mapFileStream, 10, filePosition, out filePosition));
mapFileData.DirLen = parseInt(read(mapFileStream, 10, filePosition, out filePosition));
mapFileData.NameLen = parseInt(read(mapFileStream, 10, filePosition, out filePosition));
mapFileData.Md5Len = parseInt(read(mapFileStream, 10, filePosition, out filePosition));
mapFileData.FileSize = parseInt(read(mapFileStream, 10, filePosition, out filePosition));
mapFileData.Dir = read(mapFileStream, mapFileData.DirLen, filePosition, out filePosition);
mapFileData.Name = read(mapFileStream, mapFileData.NameLen, filePosition, out filePosition);
mapFileData.Md5 = read(mapFileStream, mapFileData.Md5Len, filePosition, out filePosition);
mapFileData.ResUrl = resUrl;
mapFileData.SaveDir = _saveDir;
mapFileDataList.Add(mapFileData);
}
}
catch (System.Exception ex)
{
ret = CodeDefine.RET_FAIL_PARSE_MAP_FILE;
UpdateLog.ERROR_LOG(_TAG + ex.Message + "\n" + ex.StackTrace);
UpdateLog.EXCEPTION_LOG(ex);
}
finally
{
if (mapFileStream != null)
{
mapFileStream.Close();
}
}
return ret;
}
private int parseInt(string intStr)
{
int ret = 0;
if (!int.TryParse(intStr, out ret))
{
return -1;
}
return ret;
}
private string read(FileStream mapFileStream, int readLen , long position, out long filePosition)
{
Byte[] beginBuf = new Byte[readLen];
int readNum = mapFileStream.Read(beginBuf, 0, readLen);
filePosition = position + readLen;
if (readNum <= 0)
{
return null;
}
string retStr = System.Text.Encoding.Default.GetString(beginBuf);
return retStr;
}
}
}