public static void Init() { //把静态构造函数中的初始化操作放到这里 try { #if !机房版 //if (IRQ_GameNet.UserService.CurrentUser.Id == 0) { // DebugLog.RaiseErrorReport(ErrorLevel.Dead, "尚未登录,ResourceService须在登录后才能正常初始化。"); // return; //} #endif if (!System.IO.Directory.Exists("Data")) { System.IO.Directory.CreateDirectory("Data"); } if (!System.IO.Directory.Exists("Users")) { System.IO.Directory.CreateDirectory("Users"); } #if PACK //--用户数据 InitUserData(); //在线数据 m_OnlineScene = IRQ_Packer.OpenPacker("Data\\DataD2_dat"); OnLineSceneLib = m_OnlineScene.GetFileTable("OnlineScene"); if (OnLineSceneLib == null) { OnLineSceneLib = m_OnlineScene.AddFileTable("OnlineScene"); } //---官方数据 m_sysData = IRQ_Packer.OpenPacker("Data\\DataD_dat"); OfflineSceneLib = m_sysData.GetFileTable("OfflineScene"); if (OfflineSceneLib == null) { OfflineSceneLib = m_sysData.AddFileTable("OfflineScene"); } //自带机器人、程序 m_sysData_RobotVPL = IRQ_Packer.OpenPacker("Data\\DataD1_dat"); SystemRobotLib = m_sysData_RobotVPL.GetFileTable("SystemRobot"); if (SystemRobotLib == null) { SystemRobotLib = m_sysData_RobotVPL.AddFileTable("SystemRobot"); } SystemCtrlLib = m_sysData_RobotVPL.GetFileTable("SystemVPL"); if (SystemCtrlLib == null) { SystemCtrlLib = m_sysData_RobotVPL.AddFileTable("SystemVPL"); } SystemQuickSimPackLib = m_sysData_RobotVPL.GetFileTable("SystemQuick"); if (SystemQuickSimPackLib == null) { SystemQuickSimPackLib = m_sysData_RobotVPL.AddFileTable("SystemQuick"); } //--缓存数据 m_tempData = IRQ_Packer.OpenPacker("Data\\DataE_dat"); TempUserCtrlLib = m_tempData.GetFileTable("TempVPL"); if (TempUserCtrlLib == null) { TempUserCtrlLib = m_tempData.AddFileTable("TempVPL"); } TempUserRobotLib = m_tempData.GetFileTable("TempRobot"); if (TempUserRobotLib == null) { TempUserRobotLib = m_tempData.AddFileTable("TempRobot"); } TempLeadInResLib = m_tempData.GetFileTable("TempLeadInRes"); if (TempLeadInResLib == null) { TempLeadInResLib = m_tempData.AddFileTable("TempLeadInRes"); } #else m_CurrentUserDataDir = Path.Combine("Users", IRQ_GameNet.UserService.CurrentUser.Id.ToString()); IRQ_Utility.CheckDirectory(m_CurrentUserDataDir); UserRobotLib = new FilesSystemPackerStrategy(); UserRobotLib.Name = "Users\\" + IRQ_GameNet.UserService.CurrentUser.Id.ToString() + "\\Robot"; if (!Directory.Exists(UserRobotLib.Name)) { Directory.CreateDirectory(UserRobotLib.Name); } UserSceneLib = new FilesSystemPackerStrategy(); UserSceneLib.Name = "Users\\" + IRQ_GameNet.UserService.CurrentUser.Id.ToString() + "\\Scene"; if (!Directory.Exists(UserSceneLib.Name)) { Directory.CreateDirectory(UserSceneLib.Name); } UserCtrlLib = new FilesSystemPackerStrategy(); UserCtrlLib.Name = "Users\\" + IRQ_GameNet.UserService.CurrentUser.Id.ToString() + "\\VPL"; if (!Directory.Exists(UserCtrlLib.Name)) { Directory.CreateDirectory(UserCtrlLib.Name); } QuickLanchLib = new FilesSystemPackerStrategy(); QuickLanchLib.Name = "Users\\" + IRQ_GameNet.UserService.CurrentUser.Id.ToString() + "\\Quick"; if (!Directory.Exists(QuickLanchLib.Name)) { Directory.CreateDirectory(QuickLanchLib.Name); } FullSimpackLib = new FilesSystemPackerStrategy(); FullSimpackLib.Name = "Users\\" + IRQ_GameNet.UserService.CurrentUser.Id.ToString() + "\\FullQuick"; if (!Directory.Exists(FullSimpackLib.Name)) { Directory.CreateDirectory(FullSimpackLib.Name); } TemplateSceneLib = new FilesSystemPackerStrategy(); TemplateSceneLib.Name = "Users\\" + IRQ_GameNet.UserService.CurrentUser.Id.ToString() + "\\TemplateScene"; if (!Directory.Exists(TemplateSceneLib.Name)) { Directory.CreateDirectory(TemplateSceneLib.Name); } TemplateRobotLib = new FilesSystemPackerStrategy(); TemplateRobotLib.Name = "Users\\" + IRQ_GameNet.UserService.CurrentUser.Id.ToString() + "\\TemplateRobot"; if (!Directory.Exists(TemplateRobotLib.Name)) { Directory.CreateDirectory(TemplateRobotLib.Name); } TemplateVPLLib = new FilesSystemPackerStrategy(); TemplateVPLLib.Name = "Users\\" + IRQ_GameNet.UserService.CurrentUser.Id.ToString() + "\\TemplateVPL"; if (!Directory.Exists(TemplateVPLLib.Name)) { Directory.CreateDirectory(TemplateVPLLib.Name); } UserSettingLib = new FilesSystemPackerStrategy(); UserSettingLib.Name = "Users\\" + IRQ_GameNet.UserService.CurrentUser.Id.ToString() + "\\Setting"; if (!Directory.Exists(UserSettingLib.Name)) { Directory.CreateDirectory(UserSettingLib.Name); } OnLineSceneLib = new FilesSystemPackerStrategy(); OnLineSceneLib.Name = "Data\\DataD2\\OnlineScene"; if (!Directory.Exists(OnLineSceneLib.Name)) { Directory.CreateDirectory(OnLineSceneLib.Name); } OfflineSceneLib = new FilesSystemPackerStrategy(); OfflineSceneLib.Name = "Data\\DataD\\OfflineScene"; if (!Directory.Exists(OfflineSceneLib.Name)) { Directory.CreateDirectory(OfflineSceneLib.Name); } //特殊处理的 SystemRobotLib = new FilesSystemPackerStrategy(); SystemRobotLib.Name = "Data\\DataD1\\SystemRobot"; if (!Directory.Exists(SystemRobotLib.Name)) { Directory.CreateDirectory(SystemRobotLib.Name); } SystemCtrlLib = new FilesSystemPackerStrategy(); SystemCtrlLib.Name = "Data\\DataD1\\SystemVPL"; if (!Directory.Exists(SystemCtrlLib.Name)) { Directory.CreateDirectory(SystemCtrlLib.Name); } SystemQuickSimPackLib = new FilesSystemPackerStrategy(); SystemQuickSimPackLib.Name = "Data\\DataD1\\SystemQuick"; if (!Directory.Exists(SystemQuickSimPackLib.Name)) { Directory.CreateDirectory(SystemQuickSimPackLib.Name); } TempUserRobotLib = new FilesSystemPackerStrategy(); TempUserRobotLib.Name = "Data\\DataE\\TempRobot"; if (!Directory.Exists(TempUserRobotLib.Name)) { Directory.CreateDirectory(TempUserRobotLib.Name); } TempUserCtrlLib = new FilesSystemPackerStrategy(); TempUserCtrlLib.Name = "Data\\DataE\\TempVPL"; if (!Directory.Exists(TempUserCtrlLib.Name)) { Directory.CreateDirectory(TempUserCtrlLib.Name); } TempLeadInResLib = new FilesSystemPackerStrategy(); TempLeadInResLib.Name = "Data\\DataE\\TempLeadInRes"; if (!Directory.Exists(TempLeadInResLib.Name)) { Directory.CreateDirectory(TempLeadInResLib.Name); } #endif RegistorAllLibs(); } catch (Exception ee) { Console.WriteLine(ee.ToString()); } }
//public static string GetCurrentUserDataFile() { // return m_newuserlibfile; //} private static void InitUserData() { //m_newuserlibfile = string.Empty; //if (IRQ_GameNet.UserService.CurrentUser.Id == 0) { m_CurrentUserDataDir = Path.Combine("Users", "0"); IRobotQ.PackerDisk.DiskReadZip_FilePacker.CheckDirectory(m_CurrentUserDataDir); try { m_userData = IRQ_Packer.OpenPacker(m_CurrentUserDataDir); } catch (Exception ee) { //DebugLog.Log("打开游客数据失败", ee, true); Console.WriteLine(ee.ToString()); } //} UserRobotLib = m_userData.GetFileTable("Robot"); if (UserRobotLib == null) { UserRobotLib = m_userData.AddFileTable("Robot"); } UserSceneLib = m_userData.GetFileTable("Scene"); if (UserSceneLib == null) { UserSceneLib = m_userData.AddFileTable("Scene"); } UserCtrlLib = m_userData.GetFileTable("VPL"); if (UserCtrlLib == null) { UserCtrlLib = m_userData.AddFileTable("VPL"); } QuickLanchLib = m_userData.GetFileTable("Quick"); if (QuickLanchLib == null) { QuickLanchLib = m_userData.AddFileTable("Quick"); } FullSimpackLib = m_userData.GetFileTable("FullQuick"); if (FullSimpackLib == null) { FullSimpackLib = m_userData.AddFileTable("FullQuick"); } TemplateSceneLib = m_userData.GetFileTable("TemplateScene"); if (TemplateSceneLib == null) { TemplateSceneLib = m_userData.AddFileTable("TemplateScene"); } TemplateRobotLib = m_userData.GetFileTable("TemplateRobot"); if (TemplateRobotLib == null) { TemplateRobotLib = m_userData.AddFileTable("TemplateRobot"); } TemplateVPLLib = m_userData.GetFileTable("TemplateVPL"); if (TemplateVPLLib == null) { TemplateVPLLib = m_userData.AddFileTable("TemplateVPL"); } UserSettingLib = m_userData.GetFileTable("Setting"); if (UserSettingLib == null) { UserSettingLib = m_userData.AddFileTable("Setting"); } }
public static void Main(string[] args) { //测试序列化 List <IRQ_VPLDocInfo_Json> vpldocjsons = new List <IRQ_VPLDocInfo_Json>(); for (int i = 0; i < 1; i++) { IRQ_VPLDocInfo_Json docjs = new IRQ_VPLDocInfo_Json(); docjs.Author = "me_" + i.ToString(); docjs.CodeType = VPL_CodeType.CSharp; docjs.CreateDate = DateTime.Now; docjs.Description = ""; docjs.IsCodeMode = false; docjs.IsNoRobotMode = true; docjs.LastUpdate = DateTime.Now; docjs.NoRobotMode_LastPlatId = ""; docjs.OnCloudSvr = false; docjs.PackageUniqueId = ""; docjs.PackageVersion = "2.0"; docjs.Source = IRQ_FileDocSource.User; docjs.Ver = "2.0"; vpldocjsons.Add(docjs); } string docJsonStr = SimpleJsonEx.SimpleJson.SerializeObject(vpldocjsons); using (FileStream fs = new FileStream("test_array.json", FileMode.OpenOrCreate, FileAccess.Write)) { using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8)) { sw.Write(docJsonStr); } } //反序列化 string docJosnStr2 = ""; using (StreamReader sr = new StreamReader("test_array.json", Encoding.UTF8)) { docJosnStr2 = sr.ReadToEnd(); } List <IRQ_VPLDocInfo_Json> redocJsons = SimpleJsonEx.SimpleJson.DeserializeObject <List <IRQ_VPLDocInfo_Json> >(docJosnStr2); char[] invalid1 = Path.GetInvalidFileNameChars(); char[] invalid2 = Path.GetInvalidPathChars(); List <char> invalidChars = new List <char>(); invalidChars.AddRange(invalid1); for (int i = 0; i < invalid2.Length; i++) { if (invalidChars.Contains(invalid2[i]) == false) { invalidChars.Add(invalid2[i]); } } StringBuilder sb = new StringBuilder(); for (int i = 0; i < invalidChars.Count; i++) { sb.Append(string.Format("{0}", (int)invalidChars[i])); if (i != invalidChars.Count - 1) { sb.Append(","); } } string chars = sb.ToString(); Console.WriteLine(chars); // "'\"','<','>','|','\0','','','','','','','\a','\b','\t','\n','\v','\f','\r','','','','','','','','','','','','','','','','','','',':','*','?','\\','/'" int timestart = Environment.TickCount; ResourceService.Init(); // Stopwatch swRead = new Stopwatch(); // swRead.Start(); // IFilePackerStrategy urobot = ResourceService.GetLib(IRQ_FileType.Robot); //byte[] strInfo= urobot.OpenFile("kaka/1.png"); //urobot.DelDir("kaka"); //swRead.Stop(); //Console.WriteLine("end:"+swRead.ElapsedMilliseconds.ToString()+" ms"); //return; // //增加文件 IFileSysPackerStrategy fps = ResourceService.GetLib(IRQ_FileType.TempLeadInRes); FileStream fsadd = new FileStream("mypack.data.zip", FileMode.Open, FileAccess.Read); byte[] buf_add = new byte[fsadd.Length]; fsadd.Read(buf_add, 0, buf_add.Length); fsadd.Close(); fps.Packer.BeginUpdate(fps); if (fps.FileExists("/test/mypack.data.zip")) { byte[] testReadBuf = fps.OpenFile("/test/mypack.data.zip"); fps.DelFile("/test/mypack.data.zip"); } fps.AddFile("/test/mypack.data.zip", buf_add, DateTime.Now); //addfile fps.AddFile("/test/dir2/mypack2.data.zip", buf_add, DateTime.Now); //addfile fps.UpdateFile("/test/dir2/mypack2.data.zip", new byte[] { 1, 2, 3, 4 }, DateTime.Now); fps.AddFile("/test2/mypack.data.zip", buf_add, DateTime.Now); //addfile fps.RenameFile("/test2/mypack.data.zip", "/test2/mypack2.data.zip"); fps.RenameDir("test", "test3"); List <string> getDirs = new List <string>(); fps.GetDirs(out getDirs); fps.Clean(); fps.AddFile("/test3/mypack.data.zip", buf_add, FileEntryInfo.DateTimeFromStr_STC("2016-01-01 12:12:12")); //addfile fps.AddFile("/test4/mypack.data.zip", buf_add, DateTime.Now); //addfile getDirs = new List <string>(); fps.GetDirs(out getDirs); DateTime dtupdate = fps.GetUpdateDate("test3/mypack.data.zip"); List <string> filenames = new List <string>(); int totalSize = 0; fps.GetFiles("test3", out filenames, out totalSize); fps.DelDir("test3"); fps.RenameDir("test4", "test"); fps.Packer.EndUpdate(fps, true); Console.WriteLine("耗时:" + (Environment.TickCount - timestart).ToString() + " ms"); Console.Read(); return; string SCRATCH_FILES_PATH = "ziptest"; // { //test //CompressionType.LZMA 10次 34175ms 242k //CompressionType.PPMd 10次 68678ms 319k //CompressionType.Deflate 10次 3006ms 428k //CompressionType.BZip2 10次 10103ms 335k //CompressionType.GZip not support //CompressionType.Rar not support //CompressionType.BCJ2 not support //CompressionType.BCJ not support Stopwatch sw = new Stopwatch(); sw.Start(); //for (int i = 0; i < 10; i++) { using (var archive = ZipArchive.Create()) { DirectoryInfo di = new DirectoryInfo(SCRATCH_FILES_PATH); foreach (var fi in di.GetFiles()) { archive.AddEntry(fi.Name, fi.OpenRead(), true); } FileStream fs_scratchPath = new FileStream("compresstimetest.zip", FileMode.OpenOrCreate, FileAccess.Write); archive.SaveTo(fs_scratchPath, CompressionType.Deflate); fs_scratchPath.Close(); } //break; //} sw.Stop(); Console.WriteLine("10time (ms):" + sw.ElapsedMilliseconds.ToString()); } string scratchPath = "ziptest.zip"; using (var archive = ZipArchive.Create()) { DirectoryInfo di = new DirectoryInfo(SCRATCH_FILES_PATH); foreach (var fi in di.GetFiles()) { archive.AddEntry(fi.Name, fi.OpenRead(), true); } FileStream fs_scratchPath = new FileStream(scratchPath, FileMode.OpenOrCreate, FileAccess.Write); archive.SaveTo(fs_scratchPath, CompressionType.LZMA); fs_scratchPath.Close(); //archive.AddAllFromDirectory(SCRATCH_FILES_PATH); //archive.SaveTo(scratchPath, CompressionType.Deflate); using (FileStream fs = new FileStream("ziphead.zip", FileMode.OpenOrCreate, FileAccess.ReadWrite)) { MyHead mh = new MyHead(); byte[] headData = mh.Create(); fs.Write(headData, 0, headData.Length); // SharpCompress.IO.OffsetStream ofs = new IO.OffsetStream(fs, fs.Position); archive.SaveTo(ofs, CompressionType.Deflate); } } //write my zipfile with head data using (FileStream fs = new FileStream("mypack.data.zip", FileMode.Create, FileAccess.ReadWrite, FileShare.Read)) { MyHead mh = new MyHead(); byte[] headData = mh.Create(); fs.Write(headData, 0, headData.Length); using (FileStream fs2 = new FileStream(scratchPath, FileMode.Open, FileAccess.Read)) { byte[] buf = new byte[1024]; int rc = 0; while ((rc = fs2.Read(buf, 0, buf.Length)) > 0) { fs.Write(buf, 0, rc); } } } // //read my zip file with head // using (FileStream fs = new FileStream("mypack.data.zip", FileMode.Open, FileAccess.Read, FileShare.Read)) { byte[] buf = new byte[1024]; int offset = fs.Read(buf, 0, buf.Length); System.Diagnostics.Debug.Assert(offset == 1024); //fs.Position = 0L; SharpCompress.IO.OffsetStream substream = new SharpCompress.IO.OffsetStream(fs, offset); ZipArchive zip = ZipArchive.Open(substream, Options.KeepStreamsOpen);//cann't read //ZipArchive zip = ZipArchive.Open(fs, Options.None); //will throw exption //ZipArchive zip = ZipArchive.Open(fs, Options.KeepStreamsOpen);//cann't read foreach (ZipArchiveEntry zf in zip.Entries) { Console.WriteLine(zf.Key); //bug:the will not none in zipfile } int jjj = 0; jjj++; } }
/// <summary> /// 保存压缩包 /// </summary> /// <param name="file"></param> /// <param name="success">false:放弃修改,直接关闭。true:先保存到缓存,完成后覆盖到当前</param> public void EndUpdate(IFileSysPackerStrategy file, bool success) { string tableName = file.Name; EndUpdate(tableName, success); }
/// <summary> /// 打开压缩包 /// </summary> public void BeginUpdate(IFileSysPackerStrategy file) { string tableName = file.Name; BeginUpdate(tableName); }
public void EndUpdate(IFileSysPackerStrategy file, bool success) { string tableName = file.Name; EndUpdate(tableName, success); }
public void BeginUpdate(IFileSysPackerStrategy file) { string tableName = file.Name; BeginUpdate(tableName); }