程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#入門經典(v6) 讀書筆記 (第四部分 數據訪問)

C#入門經典(v6) 讀書筆記 (第四部分 數據訪問)

編輯:C#入門知識

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。

所有元素都必須有結束元素,除了“空”元素,但建議均使用結束元素。


 

元素與特性:
二者沒有太大區別。元素更容易閱讀,且總是可以給元素繼續添加子元素或特性,而特性則不能;但未經壓縮時進行網絡傳輸,特性寫法會占用更少的帶寬(壓縮後二者區別不大)。可綜合考慮,結合使用。



 



XML聲明:

  基本特性。版本,1.0/1.1可選,VS不支持1.1
 可選特性。編碼字符集
  可選特性。XML文檔依賴關系,值為yes/no

XML名稱空間:xmlns,xml namespace。
用xmlns指定myns名稱空間,通常映射到URI上,此處為http://www.myns.com。


  Harry Potter
 

驗證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 = @"
                    This is a book
                  ";
XDocument xmlFromString = XDocument.Parse(xmlstr);<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcHJlPg0KPHA+tKbA7c3q1ftYTUzOxLW106bKudPDWERvY3VtZW50wOCjrLSmwO1YTUzGrLbOo6iyu7qsyerD97XIo6m/ycq508NYRWxlbWVudMDgo6y2/tXfuabE3M/gvfyjrL751qez1i5TYXZlKCkgLkxvYWQoKbXIstnX96GjPC9wPg0KPHA+tNPK/b7dv+LJ+rPJWE1Mo7rTw0xJTlEgdG8gU1FssunRr8r9vt2jrNPDTElOUSB0byBYTUyw0cr9vt3Xqru7zqpYTUyjrM/qvPtQNzM1oaM8L3A+DQo8cD5MSU5RIHRvIFhNTLLp0a+zydSxo7o8L3A+DQo8cHJlIGNsYXNzPQ=="brush:java;">
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; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved