C#入门经典(v6) 读书笔记 (第四部分 数据访问)

第21章 文件系统数据

stream 流

serial device 序列化设备

compression 压缩

truncate 截断

CSV(Comma-Separated Values,逗号分隔值)

obsolete 过时的

文件路径:

string directory = Directory.GetCurrentDirectory();//获取应用程序当前工作目录

string path1 = @"c:\NewProject\bin\Debug\LogFile.txt";//绝对路径,使用@令\不解释为转义字符
string path2 = @"LogFile.txt";//相对路径,当前工作目录c:\NewProject\bin\Debug作为路径起点

string path3 = @"..\File1.txt";//..符号上移1个目录,等价于c:\NewProject\bin\File1.txt
string path4 = @"..\..\File2.txt";//..符号上移2个目录,等价于c:\NewProject\File2.txt

File、FileInfo、FileStream用于读写文件:

if (File.Exists("data.txt"))//File静态类,提供许多静态方法
{
    FileInfo fileInfo = new FileInfo("data.txt");//非静态类,对应一个文件实体
FileStream fileStream = fileInfo.OpenRead();//文件流,用于读写文件

    fileStream.Seek(6, SeekOrigin.Begin);//将文件指针设置为给定值,字节为单位

    //从fileStream流中读取200字节,写入byteData数组(从0开始)
    byte[] byteData=new byte[200];
    fileStream.Read(byteData, 0, 200);

    //将字节数组byteData采用utf8解码为字符数组charData
    char[] charData = new char[200];
    Decoder d = Encoding.UTF8.GetDecoder();
d.GetChars(byteData, 0, byteData.Length, charData, 0);

    Console.Write(charData);
}

FileStream类可以用于读取图像、声音、文本,可改变文件内部指针位置(随机文件访问),但由于处理的是原始字节,在读写文本时不能将数据直接读写字符串(需要编码转换)。在不需要改变文件内部指针位置时使用StreamReader/StreamWriter可以更便捷地处理文件。

StreamWriter/StreamWriter更方便于读写文本文件:

FileStream fs = new FileStream("data.txt", FileMode.OpenOrCreate);
StreamWriter sw = new StreamWriter(fs);//用FileStream对象创建StreamWriter,可利用其FileMode控制读写
StreamWriter sw1 = new StreamWriter("data.txt",true);//用文件创建StreamWriter,无法控制读写权限
sw.WriteLine("{0} + {1} = {2}", 1, 1, 2);//可使用格式化参数

System.IO.Compression 读写压缩文件:DeflateStream、GZipStream,详见P641。

static public void saveCompressedFile(string fileName, string data)
{
    //用FileStream初始化GZipStream,用GZipStream初始化StreamWriter,用StreamWriter写入数据
    StreamWriter writer =
        new StreamWriter(
            new GZipStream(
                new FileStream(fileName, FileMode.Create, FileAccess.Write),
                    CompressionMode.Compress));
    //写入数据
    writer.Write(data);
    writer.Close();
}

[Serializable][NonSerialized]序列化对象(以对象形式存储数据),详见P645。

FileSystemWatcher文件监控系统

FileSystemWatcher watcher = new FileSystemWatcher();

//监控目录
watcher.Path = System.IO.Path.GetDirectoryName(filePath);
//过滤器筛选被监控文件,可以是具体单一文件,也可以是扩展名如*.txt
watcher.Filter = System.IO.Path.GetFileName(filePath);
//监控文件变化种类
watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.Size;
//监控文件变化事件,绑定处理程序(此处使用Lambda表达式)
watcher.Deleted += (s, e) => AddMessage("File: {0} Deleted", e.FullPath);
watcher.Renamed += (s, e) => AddMessage("File: {0} renamed to {1}", e.OldName, e.FullPath);
watcher.Changed += (s, e) => AddMessage("File: {0} {1}", e.FullPath, e.ChangeType.ToString());
watcher.Created += (s, e) => AddMessage("File: {0} Created", e.FullPath);
//开始监控
watcher.EnableRaisingEvents = true;

//允许后台线程向UI输出消息
private void AddMessage(string formatString, params string[] parameters)
{
    Dispatcher.BeginInvoke(
        new Action(() => richTextBox1.AppendText(
            string.Format(formatString+"\n", parameters))));
}

第22章 XML

XML (Extensible Markup Language,可扩展标记语言)

URI (Uniform Resource Identifier,统一资源标识符)

URL (Uniform Resource Locator,统一资源定位符,是URI的子集)

DTD (Document Type Definitions,文档类型定义)

XSD (Xml Schemas Definition,XML模式定义,取代DTD进行XML验证)

DOM (Document Object Model,文档对象模型)

UTF-8 (8-bit Unicode Transformation Format,8位统一码转换格式)

indent 缩进

XML名称区分大小写:Name、name。

所有元素都必须有结束元素,除了“空”元素,但建议均使用结束元素。

<!--空元素,不建议写法-->
<book/>
<!--空元素,建议写法-->
<book></book>

元素与特性:

二者没有太大区别。元素更容易阅读,且总是可以给元素继续添加子元素或特性,而特性则不能;但未经压缩时进行网络传输,特性写法会占用更少的带宽(压缩后二者区别不大)。可综合考虑,结合使用。

<!--元素写法-->
<book>
  <title>Harry Potter</title>
</book>
<!--特性写法(注意引号)-->
<book title="Harry Potter">
</book>

XML声明:

<?xml version="1.0" ?>  基本特性。版本,1.0/1.1可选,VS不支持1.1
<?xml version="1.0" encoding="utf-8" ?> 可选特性。编码字符集
<?xml version="1.0" standalone="yes"?>  可选特性。XML文档依赖关系,值为yes/no

XML名称空间:xmlns,xml namespace。

用xmlns指定myns名称空间,通常映射到URI上,此处为http://www.myns.com

<book xmlns:myns="http://www.myns.com">
  <myns:title>Harry Potter</myns:title>
</book>

验证XML文档:XSD模式,取代DTD进行XML验证,详见P660。XML本身不是语言,而是定义XML应用程序的标准。符合XML标准的XML文档并不一定符合特定程序的使用规则,通过自定义的XSD模式来对XML文档进行验证:是否符合特定的规则(而不仅仅是XML标记规则)。如:可以规定元素必须有子元素。XSD模式可以有Visual Studio自动生成。

DOM:处理XML文件的一组类。

DOM类的继承关系图:

XML与关系型数据库的主要区别:XML不需要任何预定义结构,详见P658。

XPath是XML文档的查询语言,正如SQL是关系数据库的查询语言。详见P673。

//在根节点books查找所有title为Harry的book节点,返回一个节点列表
XmlElement books = doc.DocumentElement;
XmlNodeList nodes = books.SelectNodes("//book[title=‘Harry‘]");//参数为XPath查询语句

第23章 LINQ简介

LINQ (Language Integrated Query,语言集成查询,读作[lin’kju:])

projection 投影

syntax 语法

intersect 相交,交集

LINQ是C#语言的扩展,将数据查询直接集成到编程语言之中,便于处理数据集合的搜索、排序、组合、统计问题。LINQ是C#编程语言的一部分。

LINQ查询语法(建议使用):

LINQ方法语法(必要时才使用):使用对应扩展方法,传递一个查询委托。

var rst = names.Where(n => n.StartsWith("f"));//此处查询委托为Lamdba表达式

LINQ的查询语法/方法语法:简单的查询使用查询语法,较高级的查询使用方法语法,必要时可以混合使用。

LINQ查询语法&方法语法一览:

LINQ中的其他扩展方法:


第24章 应用LINQ

SQL(Structured Query Language,结构化查询语言,读作[sik?u]?)

LINQ to SQL:ADO.NET Entity Framework可以自动创建LINQ to SQL对象,即自动生成映射数据表的类。

LINQ to XML:System.Xml.Linq 函数构造方式创建Xml文档,详见P726代码。

XDocument   //文档
XElement    //元素
XAttribute  //特性
XComment    //注释
XDeclaration//申明,一般由XDocument.Save()自动添加

保存/加载XML文件:

//从xml文件加载和保存
XDocument xmlFromFile = XDocument.Load(@"c:\1.xml");
xmlFromFile.Save(@"c:\2.xml");

//从字符串加载xml
//注意字符串字面量中的双引号*2
string xmlstr = @"<books>
                    <book title=""Potter"" author=""J.K"">This is a book</book>
                  </books>";
XDocument xmlFromString = XDocument.Parse(xmlstr);

处理完整XML文档应使用XDocument类,处理XML片段(不含申明等)可使用XElement类,二者功能相近,均支持.Save() .Load()等操作。

从数据库生成XML:用LINQ to SQl查询数据,用LINQ to XML把数据转换为XML,详见P735。

LINQ to XML查询成员:

XDocument customers = XDocument.Load("customer.xml");
//Elements():所有第一级元素
var rst =
    from c in customers.Elements()
    select c;
//Descendants():所有级别的子元素(重载:元素名)
var rst =
    from c in customers.Descendants("Jack")
    select c.Name;
//Ancestors():所有比当前元素级别高的成员,不常用
var rst =
    from c in customers.Ancestors("Jack")
    select c.Value;
//Attributes():当前元素的所有特性(重载:特性名)
var rst =
    from c in customers.Descendants("Jack").Attributes("Company")
    select c.Value; 

时间: 2024-08-29 16:56:24

C#入门经典(v6) 读书笔记 (第四部分 数据访问)的相关文章

C#入门经典(读书笔记&lt;二&gt;)

一.抽象类与接口 (1)抽象类: 1.类中的方法不提供具体实现,但该类的派生类必须实现这些方法,这些方法在C#中称为抽象方法.  2. 抽象方法必须是一个没有被实现的空方法.包含抽象方法的类称为抽象类,抽象类中也可以包含非抽象方法. 因为抽象类是用来作为基类的,所以不能直接被外部程序实例化,而且也不能被密封.  3.通过关键字abstract进行标记将类声明为抽象. 不能创建抽象类的对象,但可以创建抽象类的引用. 一个abstract类可以不包含抽象方法,可以包含非抽象方法和变量. 抽象方法是虚

Entity Framework 4 in Action读书笔记——第一章:数据访问重载:Entity Fram

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 写在之前的话 在深入研究实体框架的细节之前,我们先讨论从传统的DataSet方法转换到基于对象的方法实现数据访问所带来的便利,以及这两种方法不同的工作方式是怎样导致采用像Entity Framework这样的O/RM工具. 使用Dataset和

《Java编程那点事儿》读书笔记(四)

String 1.toString:显示对象内容时系统自动调用的方法. public class TOSTRING { public String toString(){ return "this is toString method"; } } TOSTRING t = new TOSTRING(); System.out.println(t); 2.Math Math.函数 3.String 1)char charAt(int n)  //获得字符串索引为1的字符 String a

《Java web 开发实战经典》读书笔记

去年年末,也就是大四上学期快要结束的时候,当时保研的事情确定了下来,终于有了一些空闲的时间可以学点实用的技术. 之前做数据库课程设计的时候,也接触过java web的知识,当时做了一个卖二手书籍的网站,但是由于掌握的技术不够,最后做出来的东西勉强能应付答辩.所以,想抽出时间继续昨晚这个项目.当时,我有些找工作的同学,已经在北京经历了找工作的艰辛,所以他们时常会举办一些小讲座,给学弟学妹传授找工作的经验,我也从这上面学到不少东西.<Java web 开发实战经典>这本书便是以为找工作的同学浩哥给

《世界如此险恶,你要内心强大》读书笔记(四)

(1)人为什么怕死 [1] 害怕死亡的痛苦 死亡代表了最难忍受的肉体和精神痛苦,而且是不可逆的,一死,就活不过来了. [2] 害怕死亡这一最终结局 死亡是对一切可能性的终结,是不可穿透的永恒的黑暗. 在茫茫宇宙中,只是在一个偶然的时间作为一粒尘埃出现.但无论自身多么渺小,在他看来, 他的存在就是一个世界.如果他的存在被死亡抹去,那就抹去了他的一切.在这层意义上,对死亡 的恐惧与对世间的无尽眷恋息息相关.当一个人想到,如果他死去,他将彻底与所拥有的财产.所 享受的生活.所爱的人.所做的事业.所享受

《Spring实战》读书笔记--SpringMVC处理Multipart数据

<Spring实战>读书笔记--SpringMVC处理Multipart数据 1.Multipart介绍 1.1 Multipart形式的数据 Multipart格式数据会将一个表单拆分为多个部分(part),每个部分对应一个输入域.在一般的表单输入域中,它对应的部分会放置文本型数据,如果是文件上传形式,它对应的部分可以是二进制. 1.2 Multipart/form-data请求方式 Multipart/form-data是建立在HTTP的POST请求方式以上的请求,其一般用于HTTP文件上

Unity Shader入门精要读书笔记(一)序章

本系列的博文是笔者读<Unity Shader入门精要>的读书笔记,这本书的章节框架是: 第一章:着手准备. 第二章:GPU流水线. 第三章:Shader基本语法. 第四章:Shader数学基础. 第五章:利用简单的顶点/片元着色器来实现辅助技巧. 第六章:基本光照模型. 第七章:法线纹理.遮罩纹理等基础纹理. 第八章:透明度测试和透明度混合. 第九章:复杂光照实现. 第十章:高级纹理(立方体纹理等). 第十一章:纹理动画.顶点动画. 第十二章:屏幕特效. 第十三章:深度纹理. 第十四章:非真

&amp;lt;C#入门经典&amp;gt;学习笔记1之初识C#

序言 选择< C#入门经典第五版>作为自学书籍,以此记录学习过程中的笔记与心得. C#简单介绍 1. C#是一种块结构的语言 2. C#区分大写和小写 C#变量 C#的变量定义与C语言相似 一.变量类型及定义 整形及范围定义 浮点型及范围定义 float和double以 ±m?2 e 的形式存储浮点数 Decimal以 ±m?10 e 的形式存储浮点数 字符型及范围定义 字符面 注:字符串是引用类型,其他类型都是值类型.变量在使用前,必须进行初始化. 转义符 1.全部的转义序列都包含一个反斜杠

《深入理解Android2》读书笔记(四)

接上篇<深入理解Android2>读书笔记(三) ActivityManagerService(AMS) 1.AMS由ActivityManagerNative(AMN)类派生,并实现Watchdog.Monitor和BatteryStatsImpl.BatteryCallback接口.而AMN由Binder派生,实现了IActivityManager接口. 2.客户端使用ActivityManager类.由于AMS是系统核心服务,很多API不能开放供客户端使用,因此设计者没有让Activit

读书笔记(四)——傅雷家书,谆谆教诲

<傅雷家书>看了好久,反复读了好多次,细细品读,仿佛有一位未曾谋面的长者,在我的耳边谆谆教诲,时时训诫,甚为感动. 在我看来<傅雷家书>对于高中生,大学生,或者毕业不久的职场新人来说都是一本不可多得的好书. 因为在书中,通过一封封情真意切的教诲,教你怎么对待事业.怎么对待爱人.怎么理财等等很多方面,当然这种态度可能不符合你处世的态度,但是至少可以看到一个作家家长是怎么教育孩子.而且我个人认为其中很多处世的方式对我来说很长见识,对我也来说很重要,很好. 摘抄部分句子作为读书笔记: 1