需求场景:例如需要在当前目录下把相关文件组织成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. 纯C:url base64

    纯代码,来自互联网 base64.h #ifndef __BASE64_H__ #define __BASE64_H__ #ifdef __cplusplus extern "C" ...

  2. mvc core2.1 Identity.EntityFramework Core 实例配置 (四)

    https://docs.microsoft.com/zh-cn/aspnet/core/security/authentication/customize_identity_model?view=a ...

  3. ajax的原生调用

    https://blog.csdn.net/jitianxia68/article/details/78393406

  4. 《DSP using MATLAB》Problem 5.27

    代码: %% +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Outp ...

  5. 数字int字符串str(深入学习)

    数字int字符串str 查看一个对象的类 如:如查看对象变量a是什么类          用到函数type(),函数值是要查看的对象变量 1 #!/usr/bin/env python 2 # -*- ...

  6. python------模块定义、导入、优化 ------->xml模块

    1. xml模块 引用参考原文链接:https://www.cnblogs.com/python-gm/p/8032465.html      谢谢 xml是实现不同语言或程序之间进行数据交换的协议, ...

  7. whmcs之全民idc

    http://manage.cn.resellerclub.com/servlet/LogoutPassServlet 原教程例子:http://sharebar.org/1594.html (该教程 ...

  8. 【BZOJ1202】【HNOI2005】狡猾的商人

    查分约束好,好写好调好AC! 原题: 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1, ...

  9. 【mysql】索引原理-MySQL索引原理以及查询优化

    转载:https://www.cnblogs.com/bypp/p/7755307.html 一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性 ...

  10. Redis源码剖析--列表t_list实现

    Redis中的列表对象比较特殊,在版本3.2之前,列表底层的编码是 ziplist 和 linkedlist 实现的, 但是在版本3.2之后,重新引入了一个 quicklist 的数据结构,列表的底层 ...