需求场景:例如需要在当前目录下把相关文件组织成xml文件去描述。通常在组织项目中的升级文件时候可能会用到。

代码示例

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml; namespace GenerateUpgradeXml
{
class Program
{
//服务端升级xml文件名称
static readonly string serverXmlName = "AutoupdateService.xml";
//程序本身名称
static readonly string selfName = "GenerateUpgradeXml.exe";
//更新文件URL前缀
static readonly string host = "http://localhost";
//获取当前目录
static readonly string currentDirectory = System.Environment.CurrentDirectory; static void Main(string[] args)
{
CreateXml(); Console.WriteLine("生成完毕!");
Console.ReadKey();
} /// <summary>
/// 创建xml文件
/// </summary>
private static void CreateXml()
{
//创建xml文档对象
XmlDocument doc = new XmlDocument(); //创建根节点
XmlElement root = doc.CreateElement("updateFiles"); //头声明
XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "utf-8", null);
doc.AppendChild(declaration); //获取当前目录对象
DirectoryInfo directoryInfo = new DirectoryInfo(currentDirectory);
//调用递归方法组装xml文件
RecursiveDirectory(doc, root, directoryInfo); //追加根节点
doc.AppendChild(root); //保存文档
doc.Save(serverXmlName);
} /// <summary>
/// 递归目录下所有文件
/// </summary>
public static void RecursiveDirectory(XmlDocument doc,XmlElement root,DirectoryInfo directoryInfo)
{
//遍历目录下的所有文件
foreach (FileInfo file in directoryInfo.GetFiles())
{
//过滤生成后的升级xml文件和程序本身文件
if (file.Name== serverXmlName || file.Name== selfName)
{
continue;
} //路径转换
string path = directoryInfo.FullName.Replace(currentDirectory,"").Replace("\\","/"); //创建节点
XmlElement child = doc.CreateElement("file");
child.SetAttribute("path", file.Name);
child.SetAttribute("url", host + path + "/" + file.Name); //当前目录下的文件夹及附属文件
string fileName = file.Name;
if (!string.IsNullOrEmpty(path))
{
fileName = currentDirectory + path.Replace("/", "\\") + "\\" + file.Name;
} child.SetAttribute("lastver", FileVersionInfo.GetVersionInfo(fileName).FileVersion);
child.SetAttribute("size", file.Length.ToString());
child.SetAttribute("needRestart", "false"); root.AppendChild(child);
} //遍历子目录并递归
foreach (DirectoryInfo di in directoryInfo.GetDirectories())
{
RecursiveDirectory(doc, root, di);
}
}
}
}

效果图

文件详情

生成当前目录文件的xml描述的更多相关文章

  1. [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. springboot添加log4j日志配置log4j.xml生成日志文件

    第一步:添加pom文件依赖 <!-- log4j --> <dependency> <groupId>org.springframework.boot</gr ...

  3. 【U1结业机试题】新闻内容管理系统:解析XML文件读取Html模版生成网页文件

    一.作业要求: 1.在xml文件中创建新闻节点news,包含标题.作者.日期.正文等信息 2.创建HTML模板文件 3.读取xml中所有新闻信息,并使用新闻信息替换模板文件中占位符,从而为每一条新闻生 ...

  4. .NET中XML 注释 SandCastle 帮助文件.hhp 使用HTML Help Workshop生成CHM文件

    一.摘要 在本系列的第一篇文章介绍了.NET中XML注释的用途, 本篇文章将讲解如何使用XML注释生成与MSDN一样的帮助文件.主要介绍NDoc的继承者:SandCastle. .SandCastle ...

  5. Qt自动生成.rc文件并配置对应属性 程序图标 版本 描述等

    Qt项目配置文件pro里需要如下配置,进行qmake,build后会自动生成.rc文件,并将对应的信息写入文件中 VERSION = 1.0.0.1 RC_ICONS = "http.ico ...

  6. 项目打包文件build.xml

    Make命令其实就是一个项目管理工具,而Ant所实现功能与此类似.像make,gnumake和nmake这些编译工具都有一定的缺陷,但是Ant却克服了这些工具的缺陷.最初Ant开发者在开发跨平台的应用 ...

  7. windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件

    原创文章,转载请注明:http://www.cnblogs.com/ycxyyzw/p/4535459.html android 程序打包成apk,如果在是命令行方式,一般都要经过如下步骤: 1.用a ...

  8. php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类

    1. web service普及: Webservice soap wsdl区别之个人见解 Web Service实现业务诉求:  Web Service是真正“办事”的那个,提供一种办事接口的统称. ...

  9. Android 自动编译、打包生成apk文件 3 - 使用SDK Ant方式

      相关文章列表: < Android 自动编译.打包生成apk文件 1 - 命令行方式> < Android 自动编译.打包生成apk文件 2 - 使用原生Ant方式> &l ...

随机推荐

  1. tcp/ip网络里的客户端和服务器端 信息交流 与 安全

    ISP(Internet Service Provider) 互联网服务提供商, 即向广大用户综合提供互联网接入业务.信息业务.和增值业务的电信运营商. 通过wireshark学习tcp/ip. 用w ...

  2. Unity跳转场景进度条制作教程(异步加载)

    Unity跳转场景进度条制作 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...

  3. PDO数据库引擎

    PDO概述1.PDO是一种数据库访问抽象层,你不必使用以前的 mysqli_xx 之类只能访问 mysql数据库.使用PDO可以连接mysql.msssql.oracle等等,而不必重写代码.2.PD ...

  4. SenjuFamily项目总结 之 Activiti 学习总结(一)

    项目干了一年了,最近开始整理一下项目中用到的知识,算是年末总结了. 大概有如下几个点: 1.Actitivi 2.JPA 3.WebService 4.JVM使用以及代码优化(这个地方,主要参考周志明 ...

  5. 【Jmeter】分布式并发测试

    一.前提: 1.最近在做一下压测,但是单台服务器的CPU,内存可能不够支撑压测的项目,这时候,我们可以使用Jmeter分布式压测. 2.本次使用的环境: 1台服务器做master(调度器) 5台服务器 ...

  6. JOISC2019 简要题解

    第18回 日本情報オリンピック 春合宿 オンラインコンテスト (JOISC2019) 官网 Day 1 試験 (Examination) description 有\(N\)个学生,每个学生有两科成绩 ...

  7. Python中元组、列表、字典的遍历和相互转化

    一.元组,列表,字典的遍历 1.1 元组的遍历 元组的遍历借助 range() 函数,基本思想是通过元组的长度使用for循环进行遍历,代码如下:     fruits=("apple&quo ...

  8. 51cto-spring boot(一Spring4快速入门)

    https://search.maven.org/classic   查找maven依赖的pom.xml文件

  9. 05基于python玩转人工智能最火框架之TensorFlow基础知识

    从helloworld开始 mkdir mooc # 新建一个mooc文件夹 cd mooc mkdir 1.helloworld # 新建一个helloworld文件夹 cd 1.helloworl ...

  10. FastAdmin Bootstrap-Table 自定义搜索的重写提示

    Bootstrap-Table 自定义搜索的重写提示 群友询问:这个搜索能自己写么? [群主]Karson-深圳(请勿@) "★找大神-山西 10:59:32 查看原文 [图片] 这个搜索能 ...