namespace LSServerService { using System; using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; internal static class LSFileManage { private static Dictionary m_fileList = new Dictionary(); private static string m_rootPath = ""; public static void createClientDirectory(string strPath) { if (strPath != "") { try { string str = ""; string[] strArray = strPath.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < strArray.Length; i++) { str = str + strArray[i] + "/"; if (!Directory.Exists(m_rootPath + str)) { Directory.CreateDirectory(m_rootPath + str); } } } catch (Exception exception) { PubUtils.WriteLog("LSFileManage.createClientDirectory errorcode: {0} ", new object[] { exception }); } } } public static LSFileData createClientFile(string strName) { if (strName == "") { return null; } LSFileData fd = new LSFileData(); try { string path = m_rootPath + strName; fd.fs = File.Open(path, FileMode.Create, FileAccess.Write, FileShare.Read); } catch (Exception exception) { PubUtils.WriteLog("LSFileManage.createClientFile errorcode: {0} ", new object[] { exception }); eraseFile(fd); } return fd; } public static bool createDir(LSDBManage dbmanager, int parentId, string dirName) { try { Directory.CreateDirectory(m_rootPath + dbmanager.getRelativePath(parentId) + dirName); return true; } catch (Exception exception) { PubUtils.WriteLog("LSFileManage.createDir errorcode: {0} ", new object[] { exception }); } return false; } public static LSFileData createFile(LSDBManage dbmanager, int parentId, string fileName, bool saveOld) { LSFileData data = new LSFileData(); try { string str = dbmanager.getRelativePath(parentId); string rootPath = m_rootPath; string[] strArray = str.Split(new string[] { "//" }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < strArray.Length; i++) { rootPath = rootPath + strArray[i] + "//"; if (!Directory.Exists(rootPath)) { Directory.CreateDirectory(rootPath); } } string path = m_rootPath + str + fileName; if (saveOld && File.Exists(path)) { File.Move(path, path + "#" + DateTime.Now.ToString("yyyy_MM_dd#hh_mm_ss")); } data.fs = File.Open(path, FileMode.Create, FileAccess.Write, FileShare.Read); } catch (Exception exception) { PubUtils.WriteLog("LSFileManage.createFile errorcode: {0} ", new object[] { exception }); } return data; } public static bool createFileData(C2S2C_FileData data, out C2S2C_FileTranslateComplete structComplete) { structComplete = new C2S2C_FileTranslateComplete(true); try { LSFileData data2 = m_fileList[data.dwFileId]; if (data2 != null) { data2.fs.Write(data.FileData, 0, data.dwPacketLen); data2.dwTotalBytes = data.dwTotalBytes; data2.dwTotalCount = data.dwTotalCount; data2.dwRevPacketCount++; data2.lastWriteTime = Environment.TickCount; if (data2.fs.Length >= data2.dwTotalBytes) { structComplete.dwFileId = data2.dwFileId; structComplete.dwTotalBytes = data2.dwTotalBytes; structComplete.dwTotalCount = data2.dwTotalCount; structComplete.dwRevPacketCount = data2.dwRevPacketCount; structComplete.dwRevBytesLen = (int) data2.fs.Length; data2.fs.Flush(); data2.fs.Close(); data2.fs.Dispose(); data2.fs = null; lock (m_fileList) { m_fileList.Remove(data.dwFileId); } return true; } } } catch (Exception exception) { PubUtils.WriteLog("LSFileManage.createFileData errorcode: {0} ", new object[] { exception }); } return false; } public static bool deleteFile(LSDBManage dbmanager, int fileId) { try { string path = m_rootPath + dbmanager.getAbsoluteFile(fileId); if (File.Exists(path)) { File.Move(path, path + "#" + DateTime.Now.ToString("yyyy_MM_dd#hh_mm_ss")); } } catch (Exception exception) { PubUtils.WriteLog("LSFileManage.deleteFile errorcode: {0} ", new object[] { exception }); return false; } return true; } public static void dispose() { try { lock (m_fileList) { foreach (KeyValuePair pair in m_fileList) { } } } catch (Exception exception) { PubUtils.WriteLog("LSFileManage.dispose errorcode: {0} ", new object[] { exception }); } } public static void eraseFile(LSFileData fd) { if ((fd != null) && (fd.fs != null)) { try { string name = fd.fs.Name; fd.fs.Flush(); fd.fs.Close(); fd.fs.Dispose(); fd.fs = null; File.Delete(name); if (File.Exists(name)) { PubUtils.WriteLog("LSFileManage.eraseFile 无法删除指定文件: {0} ", new object[] { name }); } } catch (Exception exception) { PubUtils.WriteLog("LSFileManage.eraseFile errorcode: {0} ", new object[] { exception }); } lock (m_fileList) { m_fileList.Remove(fd.dwFileId); } } } public static void eraseFile(int dwFileId) { lock (m_fileList) { LSFileData fd = m_fileList[dwFileId]; eraseFile(fd); } } public static bool existDir(LSDBManage dbmanager, int parentId, string dirName) { string str = dbmanager.getRelativePath(parentId); return Directory.Exists(m_rootPath + str + dirName); } public static bool existFile(LSDBManage dbmanager, int parentId, string fileName) { string str = dbmanager.getRelativePath(parentId); return File.Exists(m_rootPath + str + fileName); } public static bool init(string rootPath) { m_rootPath = rootPath; return Directory.Exists(rootPath); } public static void insertFileData(LSFileData fd) { lock (m_fileList) { if (m_fileList.ContainsKey(fd.dwFileId)) { m_fileList.Remove(fd.dwFileId); } else { m_fileList.Add(fd.dwFileId, fd); } } } public static string joinFileName(string filename) { string path = m_rootPath + filename; if (File.Exists(path)) { return path; } return ""; } } }