public IList <string> Export(WordLibraryList wlList) { //对全拼方案进行编码转换 wlList = Filter(wlList); string tempPath = Path.Combine(FileOperationHelper.GetCurrentFolderPath(), "dictionary.txt"); if (File.Exists(tempPath)) { File.Delete(tempPath); } var sb = new StringBuilder(); sb.Append("# Gboard Dictionary version:1\n"); for (int i = 0; i < wlList.Count; i++) { sb.Append(ExportLine(wlList[i])); sb.Append("\n"); } FileOperationHelper.WriteFile(tempPath, new UTF8Encoding(false), sb.ToString()); string zipPath = Path.Combine(FileOperationHelper.GetCurrentFolderPath(), "Gboard词库.zip"); if (File.Exists(zipPath)) { File.Delete(zipPath); } FileOperationHelper.ZipFile(tempPath, zipPath); return(new List <string>() { "词库文件在:" + zipPath }); //return new List<string>() { sb.ToString() }; }
public IList <string> Export(WordLibraryList wlList) { //Win10拼音只支持最多32个字符的编码 wlList = Filter(wlList); string tempPath = Path.Combine(FileOperationHelper.GetCurrentFolderPath(), "Win10微软五笔词库.dat"); if (File.Exists(tempPath)) { File.Delete(tempPath); } var fs = new FileStream(tempPath, FileMode.OpenOrCreate, FileAccess.Write); BinaryWriter bw = new BinaryWriter(fs); bw.Write(Encoding.ASCII.GetBytes("mschxudp")); //proto8 bw.Write(BitConverter.GetBytes(0x00600002)); //Unknown bw.Write(BitConverter.GetBytes(1)); //version bw.Write(BitConverter.GetBytes(0x40)); //phrase_offset_start bw.Write(BitConverter.GetBytes(0x40 + 4 * wlList.Count)); //phrase_start=phrase_offset_start + 4*phrase_count bw.Write(BitConverter.GetBytes(0)); //phrase_end input after process all! bw.Write(BitConverter.GetBytes(wlList.Count)); //phrase_count bw.Write(BitConverter.GetBytes(DateTime.Now.Ticks)); //timestamp bw.Write(BitConverter.GetBytes((long)0)); //0 bw.Write(BitConverter.GetBytes((long)0)); //0 bw.Write(BitConverter.GetBytes((long)0)); //0 int offset = 0; for (var i = 0; i < wlList.Count; i++) { bw.Write(BitConverter.GetBytes(offset)); var wl = wlList[i]; offset += 8 + 8 + wl.Word.Length * 2 + 2 + wl.GetPinYinLength() * 2 + 2; } for (var i = 0; i < wlList.Count; i++) { bw.Write(BitConverter.GetBytes(0x00100010)); //magic var wl = wlList[i]; var hanzi_offset = 8 + 8 + wl.GetPinYinLength() * 2 + 2; bw.Write(BitConverter.GetBytes((short)hanzi_offset)); bw.Write((byte)wl.Rank); //1是詞頻 bw.Write((byte)0x6); //6不知道 bw.Write(BitConverter.GetBytes(0x00000000)); //Unknown bw.Write(BitConverter.GetBytes(0xE679CD20)); //Unknown var py = wl.GetPinYinString("", BuildType.None); bw.Write(Encoding.Unicode.GetBytes(py)); bw.Write(BitConverter.GetBytes((short)0)); bw.Write(Encoding.Unicode.GetBytes(wl.Word)); bw.Write(BitConverter.GetBytes((short)0)); } fs.Position = 0x18; fs.Write(BitConverter.GetBytes(fs.Length), 0, 4); fs.Close(); return(new List <string>() { "词库文件在:" + tempPath }); }
public WordLibraryList Import(string path) { var tempUnzipFolder = FileOperationHelper.GetCurrentFolderPath(); FileOperationHelper.UnZip(path, tempUnzipFolder); var tempFilePath = Path.Combine(FileOperationHelper.GetCurrentFolderPath(), "dictionary.txt"); string str = FileOperationHelper.ReadFile(tempFilePath, new UTF8Encoding(false)); File.Delete(tempFilePath); return(ImportText(str)); }
/// <summary> /// 最多支持2W条一个dat文件 /// </summary> /// <param name="wlList"></param> /// <returns></returns> public IList <string> Export(WordLibraryList wlList) { //Win10拼音对词条长度有限制 wlList = Filter(wlList); var list = new List <WordLibraryList>(); if (wlList.Count > 20000) { SendExportErrorNotice("微软拼音自学习词库最多支持2万条记录的导入,当前词条数为:" + wlList.Count + ",超过限制,请设置过滤条件或者更换词库源。"); //以后微软拼音放开2W限制了,再把这个异常取消吧。 var item20000 = new WordLibraryList(); for (var i = 0; i < wlList.Count; i++) { item20000.Add(wlList[i]); if (i % 19999 == 0 && i != 0) { list.Add(item20000); item20000 = new WordLibraryList(); } } if (item20000.Count != 0) { list.Add(item20000); } } else { list.Add(wlList); } var fileList = ""; for (var i = 0; i < list.Count; i++) { string tempPath = Path.Combine(FileOperationHelper.GetCurrentFolderPath(), "Win10微软拼音自学习词库" + i + ".dat"); if (!string.IsNullOrEmpty(this.ExportFilePath))//For test { tempPath = this.ExportFilePath; } fileList += tempPath + "\r\n"; ExportTo1File(tempPath, list[i]); } return(new List <string>() { "词库文件在:" + fileList }); }