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))));
}
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查詢語句
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中的其他擴展方法:
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 = @"
<喎?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 xmlFromString = XDocument.Parse(xmlstr); This is a book 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;