需求场景:例如需要在当前目录下把相关文件组织成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. ubuntu下配置环境

    https://blog.csdn.net/zzc15806/article/details/73662491

  2. 基于Flask开发web微信

    1. 获取二维码 app.py import re import time import requests from flask import Flask,render_template app = ...

  3. acm 2032

    ////////////////////////////////////////////////////////////////////////////////#include<iostream ...

  4. (12)模板语言-with

    with的用处 当一个变量特别特别长,可以用with给这个变量重命名 views.py from django.shortcuts import render,HttpResponse def ind ...

  5. YIT-CTF—Web

    一:背后 打开传送门——>查看网页源代码——>1b0679be72ad976ad5d491ad57a5eec0——>用MD5解密 二:一种编码 [][(![]+[])[+[]]+([ ...

  6. 《DSP using MATLAB》Problem 5.32

    代码: function [y] = ovrlpadd_v3(x, h, N) %% Overlap-Add method of block convolution %% -------------- ...

  7. jdk1.8新特性----接口可以有方法体,子类可以不用重写接口中已实现的方法

    是的这就是jdk1.8新特性之一,刚刚看到. 注意:编译环境是1.8. public interface Tree { public static String name="树名" ...

  8. linux---三剑客

    linux的三剑客分别为awk/sed/grep,是运维人员必不可少的常用命令. 一:awk取列 awk ‘{print $1 “ ” $2}’ old.txt awk /aaa/ old.txt 二 ...

  9. LeetCode - Two Sum IV - Input is a BST

    Given a Binary Search Tree and a target number, return true if there exist two elements in the BST s ...

  10. gravitee.io gateway 组件说明

    gateway 在gravitee.io是一个比较核心的组件,我们可以应用规则到请求链中(包含request,response,类似 的skipper的路由功能(可以通过pipeline的模型,在re ...