private void FilePackClick(object sender, EventArgs e) { IMenuItem menuItem = (IMenuItem)sender; FilePack pack = (FilePack)menuItem.Tag; m_clipboard.SetFileDropList(pack); }
private void AppendMenuEntryForFilePack(FilePack pack) { IMenuItem menuItem = m_menuItemProvider.Provide(pack.CommonAncestor, pack); menuItem.Click += FilePackClick; m_contextMenu.Add(menuItem); }
private void FilePacksRepositoryOnClipboardFilePacksUpdated(object sender, FilePacksChangeArgs args) { if (args.OpType == FilePacksChangeType.Added) { m_recentFilePack = args.ChangedPack; } UpdateContextMenu(); }
internal override bool TryParse(IMessageDialog dialog, FilePack filePack, out AddinResolution resolution) { resolution = null; if (!IsManifest(dialog, filePack.ManifestFile)) { return(false); } var manifest = new XmlManifest { AddinHeader = ReadHeader(), ExtensionDeclaration = ReadDeclaration(), ExtensionImplementation = ReadImplementation(), }; var addinDir = Path.Combine(filePack.AddinProbeDirectory, filePack.AddinDirectoryName); var manifestFilePath = IoHelper.GetRelativePath(filePack.ManifestFile, addinDir); manifest.ManifestFile = new ManifestFileXml { Directory = addinDir, FilePath = manifestFilePath, LastWriteTime = IoHelper.GetLastWriteTime(filePack.ManifestFile), FileHash = IoHelper.GetFileHash(filePack.ManifestFile) }; if (filePack.AssemblyFiles != null) { manifest.AssemblyFiles = new List <AssemblyFileXml>(); foreach (var assemblyFile in filePack.AssemblyFiles) { var asmFile = new AssemblyFileXml { FilePath = IoHelper.GetRelativePath(assemblyFile, addinDir), LastWriteTime = IoHelper.GetLastWriteTime(assemblyFile) }; manifest.AssemblyFiles.Add(asmFile); } } if (filePack.DataFiles != null) { manifest.DataFiles = new List <DataFileXml>(); foreach (var dataFile in filePack.DataFiles) { var dtFile = new DataFileXml { FilePath = IoHelper.GetRelativePath(dataFile, addinDir) }; manifest.DataFiles.Add(dtFile); } } return(manifest.Introspect(dialog) && manifest.TryParse(dialog, out resolution)); }
internal abstract bool TryParse(IMessageDialog dialog, FilePack filePack, out AddinResolution resolution);
public FrontEnd(string content, string assets) : base("/ui") { this.content = new FilePack(content); this.assets = new FilePack(assets); }
//压缩图片 public static void packFiles(ShowString dialog, String srcPath, String searchPatten, int maxPack, bool deleteOld) { //清除包裹文件 dialog.showString("==>清除旧包裹文件"); String[] files = Directory.GetFiles(srcPath, "*.*"); for (int i = 0; i < files.Length; i++) { int pos = files[i].LastIndexOf('\\'); String name = files[i].Substring(pos + 1, files[i].Length - (pos + 1)); if (name.IndexOf("filePacks") >= 0 || name.IndexOf("aep") >= 0) { File.Delete(files[i]); } } //开始转换 files = IOUtil.listFiles(srcPath, searchPatten); dialog.showString("==>共发现" + files.Length + "个文件"); ArrayList filePackList = new ArrayList(); FilePack filePack = new FilePack(); filePackList.Add(filePack); int addUpSize = 0; for (int i = 0; i < files.Length; i++) { int pos = files[i].LastIndexOf('\\'); String name = files[i].Substring(pos + 1, files[i].Length - (pos + 1)); byte[] data = IOUtil.ReadFile(files[i]); addUpSize += data.Length; if (i == 0)//第一个包,则将当前文件压入这个包 { filePack.addFile(name, data); if (addUpSize >= maxPack) { filePack = new FilePack(); filePackList.Add(filePack); addUpSize = data.Length; } } else//不是第一个包,则将当前文件压入后一个包 { if (addUpSize >= maxPack) { filePack = new FilePack(); filePackList.Add(filePack); addUpSize = data.Length; } filePack.addFile(name, data); } } //开始输出 String dictionFile = srcPath + "\\" + Consts.exportFileName + "_filePacks.bin"; FileStream fsDictionary = new FileStream(dictionFile, FileMode.Create); IOUtil.writeShort(fsDictionary, (short)filePackList.Count); IOUtil.writeShort(fsDictionary, (short)files.Length); dialog.showString("==>即将输出" + (filePackList.Count) + "个包裹"); int outputFiles = 0; for (int i = 0; i < filePackList.Count; i++) { FilePack pack = (FilePack)filePackList[i]; IOUtil.writeShort(fsDictionary, (short)pack.fileNames.Count); String strPack = srcPath + "\\" + Consts.exportFileName + "_" + i + ".aep"; FileStream fsPackI = new FileStream(strPack, FileMode.Create); int dataPos = 0; dialog.showString("-->开始输出第" + (i + 1) + "个包裹,共" + pack.fileNames.Count + "个文件"); for (int j = 0; j < pack.fileNames.Count; j++) { String fileName = (String)(pack.fileNames[j]); byte[] data = (byte[])pack.fileDatas[j]; IOUtil.writeString(fsDictionary, fileName); IOUtil.writeInt(fsDictionary, dataPos); IOUtil.writeInt(fsDictionary, data.Length); IOUtil.writeData(fsPackI, data); dataPos += data.Length; dialog.showString("->加入第" + (j + 1) + "个文件[" + fileName + "],长度[" + data.Length + "],当前包裹大小[" + dataPos + "]"); if (deleteOld) { File.Delete(srcPath + "\\" + fileName); } outputFiles++; dialog.setStep(outputFiles, files.Length); } fsPackI.Flush(); fsPackI.Close(); dialog.showString("->完成输出第" + (i + 1) + "个包裹"); } fsDictionary.Flush(); fsDictionary.Close(); }
//发送文件信息和内容 static void SendFileInfo(string file, Socket clientSocket, Thread th) { FilePack pack = new FilePack(); //本来想着用char[]传递呢,后来直接stringtochararray //pack.name = new char[128]; //pack.md5 = new char[32]; //此处读文件的文件名 System.IO.FileInfo file_Info0 = new System.IO.FileInfo(file); pack.name = file_Info0.Name; //此处的大小是要传输的经过编码文件的大小 System.IO.FileInfo file_Info = new System.IO.FileInfo(file + ".txt"); pack.filesize = file_Info.Length.ToString(); Int64 file_size = file_Info.Length; //读取编码文本文件md5 pack.md5 = GetMD5HashFromFile(file + ".txt"); //string sendMessage = "Message"; //编码发送字节流 //clientSocket.Send(Encoding.ASCII.GetBytes(sendMessage)); Console.WriteLine(pack.name); //确定文件信息 char[] name = new char[128]; char[] size = new char[8]; char[] md5 = new char[32]; name = pack.name.ToCharArray(); size = pack.filesize.ToString().ToCharArray(); md5 = pack.md5.ToCharArray(); //发送文件信息 Thread.Sleep(1000); clientSocket.Send(Encoding.ASCII.GetBytes(name)); Console.WriteLine(pack.filesize); Thread.Sleep(300); clientSocket.Send(Encoding.ASCII.GetBytes(size)); Thread.Sleep(300); Console.WriteLine(pack.md5); clientSocket.Send(Encoding.ASCII.GetBytes(md5)); Thread.Sleep(300); //发送文件 //Console.WriteLine("prepaire sending:" + file+".txt"); Int64 sent_size = 0; Int64 remained_size; Int64 send_size; //读文件读二进制流 FileStream fs = new FileStream(file + ".txt", FileMode.Open); BinaryReader br = new BinaryReader(fs); while (sent_size < file_size) { //Console.WriteLine(sent_size); remained_size = file_size - sent_size; if (remained_size > 1024) { send_size = 1024; } else { send_size = remained_size; } //将读到的数据变成字节发送。其实没必要,发送二进制流就好了,改一下下面的读字节流 byte[] bs = br.ReadBytes((int)send_size); clientSocket.Send(bs); sent_size += send_size; //显示发送进度用,可以删除 Console.WriteLine(sent_size); Thread.Sleep(50); } //发送完成 Console.WriteLine("file send over"); fs.Flush(); fs.Close(); //发送完毕,删除发送的编码文件 File.Delete(file + ".txt"); }
//压缩图片 public static void packFiles(ShowString dialog,String srcPath, String searchPatten, int maxPack,bool deleteOld) { //清除包裹文件 dialog.showString("==>清除旧包裹文件"); String[] files = Directory.GetFiles(srcPath, "*.*"); for (int i = 0; i < files.Length; i++) { int pos = files[i].LastIndexOf('\\'); String name = files[i].Substring(pos + 1, files[i].Length - (pos + 1)); if (name.IndexOf("filePacks")>=0 || name.IndexOf("aep")>=0) { File.Delete(files[i]); } } //开始转换 files = IOUtil.listFiles(srcPath, searchPatten); dialog.showString("==>共发现" + files.Length + "个文件"); ArrayList filePackList = new ArrayList(); FilePack filePack = new FilePack(); filePackList.Add(filePack); int addUpSize = 0; for (int i = 0; i < files.Length; i++) { int pos = files[i].LastIndexOf('\\'); String name = files[i].Substring(pos + 1, files[i].Length - (pos + 1)); byte[] data = IOUtil.ReadFile(files[i]); addUpSize += data.Length; if (i == 0)//第一个包,则将当前文件压入这个包 { filePack.addFile(name, data); if (addUpSize >= maxPack) { filePack = new FilePack(); filePackList.Add(filePack); addUpSize = data.Length; } } else//不是第一个包,则将当前文件压入后一个包 { if (addUpSize >= maxPack) { filePack = new FilePack(); filePackList.Add(filePack); addUpSize = data.Length; } filePack.addFile(name, data); } } //开始输出 String dictionFile = srcPath + "\\" + Consts.exportFileName + "_filePacks.bin"; FileStream fsDictionary = new FileStream(dictionFile, FileMode.Create); IOUtil.writeShort(fsDictionary, (short)filePackList.Count); IOUtil.writeShort(fsDictionary, (short)files.Length); dialog.showString("==>即将输出" + (filePackList.Count) + "个包裹"); int outputFiles = 0; for (int i = 0; i < filePackList.Count; i++) { FilePack pack = (FilePack)filePackList[i]; IOUtil.writeShort(fsDictionary, (short)pack.fileNames.Count); String strPack = srcPath + "\\" + Consts.exportFileName + "_" + i + ".aep"; FileStream fsPackI = new FileStream(strPack, FileMode.Create); int dataPos = 0; dialog.showString("-->开始输出第" + (i + 1) + "个包裹,共" + pack.fileNames.Count + "个文件"); for (int j = 0; j < pack.fileNames.Count; j++) { String fileName = (String)(pack.fileNames[j]); byte[] data = (byte[])pack.fileDatas[j]; IOUtil.writeString(fsDictionary, fileName); IOUtil.writeInt(fsDictionary, dataPos); IOUtil.writeInt(fsDictionary, data.Length); IOUtil.writeData(fsPackI, data); dataPos += data.Length; dialog.showString("->加入第" + (j + 1) + "个文件[" + fileName + "],长度[" + data.Length + "],当前包裹大小[" + dataPos + "]"); if (deleteOld) { File.Delete(srcPath+"\\"+fileName); } outputFiles++; dialog.setStep(outputFiles, files.Length); } fsPackI.Flush(); fsPackI.Close(); dialog.showString("->完成输出第" + (i + 1) + "个包裹"); } fsDictionary.Flush(); fsDictionary.Close(); }