基于文件夹目录生成CHM电子书
2010-11-23 12:48
162 查看
昨天因为时间的原因,就草草的写了个比较简单的方法,调用hha.dll来编译CHM文件,昨天晚上回去,将这个方法整理到ChmHelper.dll中了,具体的代码如下:
CHMDocument.cs文件
添加编译的重载方法
关于hha.dll中的 代码
新的创建hhp的方法
昨天的“农民伯伯”说想整个基于文件夹目录的生成CHM的软件,想了下,也不是很难,主要的难点就是如果确定子节点、父节点的关系。于是乎,昨晚花了点时间,将其实现,现将代码和实现跟大家分享:
这个是测试的文件夹目录:
程序的界面如下:很简单的一个界面,选择根目录,编译(使用hha.dll)
这个是生成的chm电子书,基于文件夹目录的
代码:
遍历整个目录,生成父节点、子节点
编译按钮,在这里设置跟节点
程序下载
附件:http://down.51cto.com/data/2358219
CHMDocument.cs文件
添加编译的重载方法
/// <summary> /// 使用hha.dll进行编译 /// </summary> /// <param name="file"></param> /// <returns></returns> public bool Compile(string file) { this.CreateHhp(); this.OpenHhc(); this.OpenHhk(); HHA_CompileHHP(this.strHhp, GetInfo1, GetInfo1, 0); return true; }
关于hha.dll中的 代码
delegate string GetInfo(string log); [DllImport("hha.dll")] static extern bool HHA_CompileHHP(string hhp, GetInfo pro, GetInfo fi, int flag); public string GetInfo1(string log) { this.OutPutText += log; return log; }
新的创建hhp的方法
/// <summary> /// 创建hhp文件 /// </summary> /// <param name="htmFile">htm文件名</param> private void CreateHhp() { FileStream fs = new FileStream(strHhp, FileMode.Create); //创建hhp文件 streamWriter = new System.IO.StreamWriter(fs, System.Text.Encoding.GetEncoding(config.EncodeType));//可能会报警告 streamWriter.WriteLine("[OPTIONS]"); streamWriter.WriteLine("Compatibility=1.1 or later"); streamWriter.WriteLine("Compiled file=" + "Alexis.chm"); //chm文件名,要带后缀名 streamWriter.WriteLine("Contents file=" + strHhc); //hhc文件名 streamWriter.WriteLine("Index file=" + strHhk); streamWriter.WriteLine("Default topic=" + config.DefaultPage); //默认页 streamWriter.WriteLine("Display compile progress=yes"); //是否显示编译过程 streamWriter.WriteLine("Language=0x804 中文(中国)"); //chm文件语言 streamWriter.WriteLine("Title=" + _title);//标题 streamWriter.WriteLine("Default Window=Main"); streamWriter.WriteLine(); streamWriter.WriteLine("[WINDOWS]"); streamWriter.WriteLine("Main=,\"xeditor.hhc\",\"xeditor.hhk\",,,,,,,0x20,180,0x104E, [80,60,720,540],0x0,0x0,,,,,0");//这里最重要了,一般默认即可 streamWriter.WriteLine(); streamWriter.WriteLine("[FILES]"); NodesHhp(nodeList); streamWriter.WriteLine(); streamWriter.Close(); }
昨天的“农民伯伯”说想整个基于文件夹目录的生成CHM的软件,想了下,也不是很难,主要的难点就是如果确定子节点、父节点的关系。于是乎,昨晚花了点时间,将其实现,现将代码和实现跟大家分享:
这个是测试的文件夹目录:
程序的界面如下:很简单的一个界面,选择根目录,编译(使用hha.dll)
这个是生成的chm电子书,基于文件夹目录的
代码:
遍历整个目录,生成父节点、子节点
private void GetFiles(string filePath, CHMNode node) { DirectoryInfo folder = new DirectoryInfo(filePath); node.Name = folder.Name; FileInfo[] chldFiles = folder.GetFiles("*.*"); foreach (FileInfo chlFile in chldFiles) { if (chlFile.Extension == ".htm" || chlFile.Extension == ".html") { CHMNode chldNode = new CHMNode(); chldNode.Name = chlFile.Name; chldNode.Local = chlFile.FullName; node.Nodes.Add(chldNode); } } DirectoryInfo[] chldFolders = folder.GetDirectories(); foreach (DirectoryInfo chldFolder in chldFolders) { CHMNode chldNode = new CHMNode(); chldNode.Name = folder.Name; node.Nodes.Add(chldNode); GetFiles(chldFolder.FullName, chldNode); } }
编译按钮,在这里设置跟节点
private void btnComplie_Click(object sender, EventArgs e) { if (this.txtPath.Text=="") { MessageBox.Show("请选择目录"); return; } CHMDocument document = new CHMDocument(); document.FileName = "Made by Alexis"; document.Title = "Alexis";//设置根目录的名字 //根节点 CHMNode root = new CHMNode(); root.Name = this.txtPath.Text.Substring(this.txtPath.Text.LastIndexOf('\\') + 1); document.Nodes.Add(root); GetFiles(this.txtPath.Text, root); //编译 document.Compile("a"); }
程序下载
附件:http://down.51cto.com/data/2358219
相关文章推荐
- 基于文件夹目录生成CHM电子书
- MFC在指定目录生成文件夹
- 解决VS2010在程序根目录生成ipch文件夹和.sdf格式文件问题以及右键查看变量申明和定义按钮变灰
- 高效系列:bat生成文件夹目录 & 折腾exe及icon配合
- Jsoup学习笔记6之File类操作文件:获取指定目录下面,指定扩展名(.saz)的文件,并在对应的文件夹下生成同名的csv文件。
- 根据网页文件夹结构自动生成CHM帮助文件
- 生成chm文件左侧目录乱码问题解决办法
- 找到目录下的文件夹 并且进行压缩,然后再生成压缩文件到指定目录
- 提取并生成文件夹下所有目录和文件名
- 解决VS2010在程序根目录生成ipch文件夹和.sdf格式文件问题
- 利用hha.dll生成chm格式电子书
- 获取文件夹下的文件名生成新的文件&DOC命令想从指定的txt中读出文件名,然后在指定文件夹以及子目录下搜索文件,并拷贝到指定目录
- 让网站实时生成多种电子书:jar、umd、chm、pdf、epub
- CMD生成文件夹目录结构
- 批量生成文件夹内文件的目录
- php 生成水印及文件夹目录文件读取
- 关于网站目录下自动生成“aspnet_client”文件夹的问题
- 如何在linux下快速生成当前目录下所有文件夹下所有文件的MD5
- 上传多媒体在多媒体文件所在目录下会生成temp文件夹解决办法...
- D'Fusion中lua调用c++生成的dll库,并且lua调用c++代码(遍历文件夹中整个目录)