[转]用C#实现将HTML文件转换为CHM文件

简介:   这些天因为工作需要,要将一些html文件转换为chm文件,当然是需要和程序结合在一起。 后来找到NDoc,里头有一段代码是相关的,于是开始分析代码,写完之后, 总结:主要是利用微软的hhc.exe来编译html文件,程序需要将具体的数据写入hhp和hhc文件。
 
 

这些天因为工作需要,要将一些html文件转换为chm文件,当然是需要和程序结合在一起。
后来找到NDoc,里头有一段代码是相关的,于是开始分析代码,写完之后,

总结:主要是利用微软的hhc.exe来编译html文件,程序需要将具体的数据写入hhp和hhc文件。
主要代码如下:

 

public   void  CompileProject()
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif
{
    Process helpCompileProcess 
= new Process();  //创建新的进程,NDOC采用Process启动HHC.EXE来Compile一个CHM文件

    
try
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
{
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**/////判断文件是否存在并不被占用
        try
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
string path = _chmFile;  //chm生成路径 

            
if (File.Exists(path))
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
{
                File.Delete(path);
            }

        }

        
catch
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
throw new Exception("文件被打开!");
        }


        ProcessStartInfo processStartInfo 
= new ProcessStartInfo();
        processStartInfo.WindowStyle 
= ProcessWindowStyle.Hidden;
        processStartInfo.FileName 
= hhcFile;  //调入HHC.EXE文件  
        processStartInfo.Arguments = "\"" + Path.GetFullPath(GetPathToProjectFile()) + "\"";//获取空的HHP文件

        helpCompileProcess.StartInfo 
= processStartInfo;

        
//开始生成.
        helpCompileProcess.Start();

        helpCompileProcess.WaitForExit(); 
//组件无限期地等待关联进程退出

        
if (helpCompileProcess.ExitCode == 0)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            MessageBox.Show(
new Exception().Message);
        }


    }

    
finally
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
{
        helpCompileProcess.Close();
    }

}

public   void  OpenProjectFile()
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif
{
    FileStream fs 
= new FileStream(GetPathToProjectFile(), FileMode.Create);
    streamHtmlHelp 
= new System.IO.StreamWriter(fs, System.Text.Encoding.GetEncoding("GB18030"));
    streamHtmlHelp.WriteLine(
"[FILES]");
}

public   void  AddFileToProject( string  filename)
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif
{
    streamHtmlHelp.WriteLine(filename);
}

public   void  CloseProjectFile( string  title)
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif
{
    streamHtmlHelp.WriteLine();
    streamHtmlHelp.WriteLine(
"[OPTIONS]");
    streamHtmlHelp.WriteLine(
"Title=" + title);
    streamHtmlHelp.WriteLine(
"Compatibility=1.1 or later");
    streamHtmlHelp.WriteLine(
"Compiled file=" + GetCompiledHtmlFilename());  //chm文件名
    streamHtmlHelp.WriteLine("Contents file=" + GetContentsHtmlFilename());  //hhc文件名
    streamHtmlHelp.WriteLine("Default topic=" + _defaultTopic);  //默认页
    streamHtmlHelp.WriteLine("Display compile progress=No"); //是否显示编译过程 
    streamHtmlHelp.WriteLine("Language=0x804 中文(中国)");  //chm文件语言

    streamHtmlHelp.WriteLine();
    streamHtmlHelp.WriteLine(
"[INFOTYPES]");

    streamHtmlHelp.Close();
}


 

转自:http://www.cnblogs.com/monthkey/archive/2004/06/15/15995.aspx

目录
相关文章
|
9月前
|
XML 前端开发 C#
C#编程实践:解析HTML文档并执行元素匹配
通过上述步骤,可以在C#中有效地解析HTML文档并执行元素匹配。HtmlAgilityPack提供了一个强大而灵活的工具集,可以处理各种HTML解析任务。
401 19
|
存储 监控 算法
基于 C# 的局域网计算机监控系统文件变更实时监测算法设计与实现研究
本文介绍了一种基于C#语言的局域网文件变更监控算法,通过事件驱动与批处理机制结合,实现高效、低负载的文件系统实时监控。核心内容涵盖监控机制选择(如事件触发机制)、数据结构设计(如监控文件列表、事件队列)及批处理优化策略。文章详细解析了C#实现的核心代码,并提出性能优化与可靠性保障措施,包括批量处理、事件过滤和异步处理等技术。最后,探讨了该算法在企业数据安全监控、文件同步备份等场景的应用潜力,以及未来向智能化扩展的方向,如文件内容分析、智能告警机制和分布式监控架构。
317 3
基于 C# 编写的 Visual Studio 文件编码显示与修改扩展插件
基于 C# 编写的 Visual Studio 文件编码显示与修改扩展插件
563 9
|
Web App开发 前端开发 搜索推荐
创建HTML文件
【10月更文挑战第14天】创建HTML文件
758 4
|
JSON 数据格式
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
1781 2
|
存储 C#
【C#】大批量判断文件是否存在的两种方法效率对比
【C#】大批量判断文件是否存在的两种方法效率对比
561 1
写一个HTML文件
【8月更文挑战第27天】写一个HTML文件。
272 1
|
JavaScript 前端开发 容器
Vue生成PDF文件攻略:html2canvas与jspdf联手,中文乱码与自动换行难题攻克
Vue生成PDF文件攻略:html2canvas与jspdf联手,中文乱码与自动换行难题攻克
2905 0
|
C#
C#实现的html内容截取.
C#实现的html内容截取.
137 0
|
XML 存储 缓存
C#使用XML文件的详解及示例
C#使用XML文件的详解及示例
911 0