生成当前目录文件的xml描述
需求场景:例如需要在当前目录下把相关文件组织成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描述的更多相关文章
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- springboot添加log4j日志配置log4j.xml生成日志文件
第一步:添加pom文件依赖 <!-- log4j --> <dependency> <groupId>org.springframework.boot</gr ...
- 【U1结业机试题】新闻内容管理系统:解析XML文件读取Html模版生成网页文件
一.作业要求: 1.在xml文件中创建新闻节点news,包含标题.作者.日期.正文等信息 2.创建HTML模板文件 3.读取xml中所有新闻信息,并使用新闻信息替换模板文件中占位符,从而为每一条新闻生 ...
- .NET中XML 注释 SandCastle 帮助文件.hhp 使用HTML Help Workshop生成CHM文件
一.摘要 在本系列的第一篇文章介绍了.NET中XML注释的用途, 本篇文章将讲解如何使用XML注释生成与MSDN一样的帮助文件.主要介绍NDoc的继承者:SandCastle. .SandCastle ...
- Qt自动生成.rc文件并配置对应属性 程序图标 版本 描述等
Qt项目配置文件pro里需要如下配置,进行qmake,build后会自动生成.rc文件,并将对应的信息写入文件中 VERSION = 1.0.0.1 RC_ICONS = "http.ico ...
- 项目打包文件build.xml
Make命令其实就是一个项目管理工具,而Ant所实现功能与此类似.像make,gnumake和nmake这些编译工具都有一定的缺陷,但是Ant却克服了这些工具的缺陷.最初Ant开发者在开发跨平台的应用 ...
- windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
原创文章,转载请注明:http://www.cnblogs.com/ycxyyzw/p/4535459.html android 程序打包成apk,如果在是命令行方式,一般都要经过如下步骤: 1.用a ...
- php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类
1. web service普及: Webservice soap wsdl区别之个人见解 Web Service实现业务诉求: Web Service是真正“办事”的那个,提供一种办事接口的统称. ...
- Android 自动编译、打包生成apk文件 3 - 使用SDK Ant方式
相关文章列表: < Android 自动编译.打包生成apk文件 1 - 命令行方式> < Android 自动编译.打包生成apk文件 2 - 使用原生Ant方式> &l ...
随机推荐
- ubuntu下配置环境
https://blog.csdn.net/zzc15806/article/details/73662491
- 基于Flask开发web微信
1. 获取二维码 app.py import re import time import requests from flask import Flask,render_template app = ...
- acm 2032
////////////////////////////////////////////////////////////////////////////////#include<iostream ...
- (12)模板语言-with
with的用处 当一个变量特别特别长,可以用with给这个变量重命名 views.py from django.shortcuts import render,HttpResponse def ind ...
- YIT-CTF—Web
一:背后 打开传送门——>查看网页源代码——>1b0679be72ad976ad5d491ad57a5eec0——>用MD5解密 二:一种编码 [][(![]+[])[+[]]+([ ...
- 《DSP using MATLAB》Problem 5.32
代码: function [y] = ovrlpadd_v3(x, h, N) %% Overlap-Add method of block convolution %% -------------- ...
- jdk1.8新特性----接口可以有方法体,子类可以不用重写接口中已实现的方法
是的这就是jdk1.8新特性之一,刚刚看到. 注意:编译环境是1.8. public interface Tree { public static String name="树名" ...
- linux---三剑客
linux的三剑客分别为awk/sed/grep,是运维人员必不可少的常用命令. 一:awk取列 awk ‘{print $1 “ ” $2}’ old.txt awk /aaa/ old.txt 二 ...
- 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 ...
- gravitee.io gateway 组件说明
gateway 在gravitee.io是一个比较核心的组件,我们可以应用规则到请求链中(包含request,response,类似 的skipper的路由功能(可以通过pipeline的模型,在re ...