C# 之三类文件的读写( .XML,.INI 和 .TXT 文件)
笔记之用,关于三类.xml, .ini, .txt 文件的 C# 读写,请多多指教!
1,第一类:.xml 文件的读写
先贴上xml文件,下面对这个文件进行操作:
<?xml version="1.0" encoding="utf-8"?>
<NetWork name="GlobalNet" Version="2.0.0.0">
<Factory name="China" StationNum="0">
<Machine name="FireBird">
<IpAddr name="192.168.65.111" />
<ValidChannel num="1" />
<ValidChannel num="2" />
<ValidChannel num="3" />
</Machine>
</Factory>
<Factory name="UK" StationNum="1">
<Machine name="NuEagle">
<IpAddr name="192.168.65.180" />
</Machine>
</Factory>
<Factory name="USA" StationNum="2">
<Machine name="Felix">
<IpAddr name="192.168.65.48" />
</Machine>
</Factory>
</NetWork>
操作之前,有几点需要弄清:
a, 节点/元素:如下图Network,Factory,Machine这一类都可以称之为元素或节点;
b, 元素阶层(深度);最顶层为0,依次加1;如图NetWork的深度为0,Factory为1,Machine为2,IpAddr为3。
c, 属性; 属性的形式为:属性名=”属性值”,比如 name="GlobalNet" ,name就是属性,GlobalNet就是属性值。

C# 的xml的读取可用 XmlReader,这里说一下ReadToDescendant,它用来查找子代(子元素节点),并且可以定位到子节点,如图当找完工厂(Factory)后要去找机器(Machine):
using (XmlReader reader = XmlReader.Create(@"C:\Users\user\Desktop\network.xml"))
{
while (reader.Read())
{
if (reader.IsStartElement())
{
switch (reader.Name.ToString())
{
//依据工厂来划分每一个站
case "Factory":
//获取工厂名以及工厂号
string factoryName = reader.GetAttribute("name");
string factoryNo = reader.GetAttribute("StationNum"); //获取工厂下的机器名
reader.ReadToDescendant("Machine");
string machineName = reader.GetAttribute("name"); //获取机器的IP
reader.ReadToDescendant("IpAddr");
string machineIP = reader.GetAttribute("name"); break;
}
}
}
}
2,第二类:INI 文件的读写。
这里会用到kernel32这个库,他本身有两个我们可以拿来用的函数(WritePrivateProfileString,WritePrivateProfileString)去处理 .ini 文件;这里将读写放在一个类里,我们先来看看这个类的内容.
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text; namespace Ini
{
/// <summary>
/// Create a New INI file to store or load data
/// </summary>
public class IniFile
{
public string path; [DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section,string key,string val,string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath); /// <summary>
/// INIFile 构造
/// </summary>
/// <param name="INIPath"></param>
public IniFile(string INIPath)
{
path = INIPath;
}
/// <summary>
/// INI文件写入数据
/// </summary>
/// <param name="Section"></param>
/// Section name
/// <param name="Key"></param>
/// Key Name
/// <param name="Value"></param>
/// Value Name
public void IniWriteValue(string Section,string Key,string Value)
{
WritePrivateProfileString(Section,Key,Value,this.path);
} /// <summary>
/// 从Ini文件读取数据值
/// </summary>
/// <param name="Section"></param>
/// <param name="Key"></param>
/// <param name="Path"></param>
/// <returns></returns>
public string IniReadValue(string Section,string Key)
{
StringBuilder temp = new StringBuilder();
int i = GetPrivateProfileString(Section,Key,"",temp,,this.path);
return temp.ToString(); }
}
}
那么对应MySQL的 my.ini 文件如何操作,下面将示范如何在mysqld区间读取并且改变server-id 这个键的值:
my.ini 节选:
[mysqld]
# The next three options are mutually exclusive to SERVER_PORT below.
# skip-networking
# shared-memory-base-name=MYSQL
# The Pipe the MySQL Server will use
# socket=MYSQL
# The TCP/IP Port the MySQL Server will listen on
port=3306
# Path to installation directory. All paths are usually resolved relative to this.
# basedir="C:/Program Files/MySQL/MySQL Server 5.7/"
……
# Binary Logging.
# log-bin
# Error Logging.
log-error="NENGKA.err"
# Server Id.
server-id=111
……
C#读写 my.ini :
//MySQL的配置文档的修改
IniFile ini = new IniFile("my.ini");
ini.IniReadValue("mysqld", "server-id");
string IPAdd = "";
ini.IniWriteValue("mysqld", "server-id", IPAdd);
3, 第三类:C# 读写 Text。
如下,这段代码是读取mysql输出的内容(略有省略),为了简化输出,方便客户查看,所有需要做一个解析。
txt 文件内容:
Slave_IO_State: Waiting for master to send event
Master_Host: *.*.*.*
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 10726644
Relay_Log_File: mysqld-relay-bin.000056
Relay_Log_Pos: 231871
Relay_Master_Log_File: mysql-bin.000001
……
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
……
Replicate_Do_DB: data1
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 10726644
Relay_Log_Space: 232172
Until_Condition: None
Until_Log_File:
……
这里主要使用FileStream,StreamReader,不断的ReadLine找出关键字。
//简化MySQL命令的输出
bool Slave_IO_Running = false;
bool Slave_SQL_Running = false;
string file = @"C:\Users\user\Desktop\mysqloutput.txt"; using(FileStream fs = new FileStream(file,FileMode.Open,FileAccess.Read))
using (StreamReader sr = new StreamReader(fs))
{
try
{
string currentLine = sr.ReadLine();
while (currentLine != null)
{
//判断Slave_IO_Running是否在运行
if (currentLine.Contains("Slave_IO_Running"))
{
Slave_IO_Running = currentLine.Split(':')[].Trim() == "Yes" ? true : false;
}
//判断Slave_SQL_Running是否在运行
if (currentLine.Contains("Slave_SQL_Running"))
{
Slave_SQL_Running = currentLine.Split(':')[].Trim() == "Yes" ? true : false;
}
currentLine = sr.ReadLine();
}
fs.Close();
sr.Close();
}
catch
{
}
}
C# 之三类文件的读写( .XML,.INI 和 .TXT 文件)的更多相关文章
- java算法面试题:编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。
package com.swift; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...
- 使用Java将搜狗词库文件(文件后缀为.scel)转为.txt文件
要做一个根据词库进行筛选主要词汇的功能,去搜狗下载专业词汇词库时,发现是.scel文件,且通过转换工具(http://tools.bugscaner.com/sceltotxt/)转换为txt时报错如 ...
- C语言对文件的读写操作以及处理CSV文件的方法
#include <stdio.h> #define F_PATH "d:\myfile\file.txt" int main(void) { FILE *fp = N ...
- python pandas 中文件的读写——read_csv()读取文件
read_csv()读取文件1.python读取文件的几种方式read_csv 从文件,url,文件型对象中加载带分隔符的数据.默认分隔符为逗号read_table 从文件,url,文件型对象中加载带 ...
- C++文件处理(一):读/写txt文件
C++文件处理与C语言不同,C++文件处理使用的是:流(stream) C++头文件fstream定义了三个类型来支持文件IO
- java 根据Url下载对应的文件到指定位置,读txt文件获取url
package test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; im ...
- dom4j的读写xml文件,读写xml字符串
百度了一些博客,大同小异,在选取jar包工具的时候大概看了下,大抵是jdom原始,dom4j优秀.于是做了些练习. 参考:http://www.cnblogs.com/mengdd/archive/2 ...
- 基于java:读写一个英文的txt文件,记录单词个数,并输出十个出现最多的单词及出现的个数;
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; class W ...
- Android开发---如何操作资源目录中的资源文件4 ---访问xml的配置资源文件的内容
Android开发---如何操作资源目录中的资源文件4 XML,位于res/xml/,这些静态的XML文件用于保存程序的数据和结构. XmlPullParser可以用于解释xml文件 效果图: 描述: ...
随机推荐
- 错误:Unsupported major.minor version 51.0的解决
问题: 在电脑上双击打开一个可执行的jar时报错:Unsupported major.minor version 51.0.原因是版本问题,该jar使用jdk1.7编译,而我电脑装的是jdk1.6. ...
- redis 简易监控的几种方法
简介 针对Redis 实现性能监控的几种方法 一.使用info命令 命令说明 127.0.0.1:6380> info # Server redis_version:3.2.11 redis_g ...
- SDK,API概念
什么是SDK什么是API? SDK 就是 Software Development Kit 的缩写,就是"软件开发工具包". 这是一个覆盖面相当广泛的名词,可以这么说:辅助开发某一 ...
- ABP官方文档翻译 6.2.1 ASP.NET Core集成
ASP.NET Core 介绍 迁移到ASP.NET Core? 启动模板 配置 启动类 模块配置 控制器 应用服务作为控制器 过滤器 授权过滤器 审计Action过滤器 校验过滤器 工作单元Acti ...
- apache配置详解
可参考:Apache 的 httpd.conf 详解 ServerTokens OS 此指令控制了Server回送给客户端的回应头域是否包含关于服务器OS类型和编译进的模块描述信息.服务器会发送:Se ...
- 洛谷 [P1280] 尼克的任务
DP 题目问的是最大空暇时间,那么就定义dp[i]为第i分钟的最大空暇时间,显然满足最优子结构,我们发现dp[i]仅与其后的值有关,那么从后往前推,如果第i分钟没有任务,dp[i]=dp[i+1],如 ...
- 洛谷 P3711 仓鼠的数学题 [伯努利数 fft]
P3711 仓鼠的数学题 题意: \[ S_m(x) = \sum_{k=0}^x k^m, 0^0=1\quad 求 \sum_{m=0}^n S_m(x)a_m \] 的答案多项式\(\sum_{ ...
- OI常用读入方式效率测试
我来填坑了. 这次我用自己写的测试读入的程序来分别测试cin(不关闭流同步),scanf和读入优化的效率差别. 我们分别对三个阶段的数据量n进行测试,通过时间比对来观察性能的差异. n = 102 ...
- EntityFramework 实践 Overview
使用EntityFramework,是微软出的一个轻量级ORM框架,对于做一些小型的项目非常方便,几乎是零配置,以及对linq的支持,所以非常的易于使用,虽然已经使用EntityFramework很久 ...
- Oracle-11g 中使用表空间透明数据加密(TDE)
Oracle-11g 中使用表空间透明数据加密(TDE)的限制 TDE 表空间加密方式会在数据读写过程中加解密数据.与在 SQL 层面做加解密的 TDE 列加密方式相比,其限制要大幅减少.例如:数据类 ...