116 lines
4.0 KiB
C#
116 lines
4.0 KiB
C#
|
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;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|