計算機中文件有很多種,我們知道實際存在計算機中的都是二進制。這裏我記錄了通過流對文件的讀取操作。
首先在這裏簡單涉及下位,字節,字符的概念。
位(bit)可以表示0或1,
字節(byte)由8位組成(bit),可以表示0-255,256個不同的數據。
字符,字符根據編碼的不同有所區別。
ANSI編碼(本地化),它是支持本地的編碼方式,不同 ANSI 編碼之間互不兼容。在簡體中文系統下,ANSI 編碼代表 GB2312 編碼,在日文操作系統下,ANSI 編碼代表 JIS 編碼。對於字符來說ANSI以單字節存放英文字符,以雙字節存放中文等字符。
Unicoide編碼,Unicode下,英文和中文的字符都以雙字節存放。用來給 UNICODE 字符集編碼的標準有很多種,比如:UTF-8, UTF-7, UTF-16, UnicodeLittle, UnicodeBig 等。
UTF-8時表示一個字符是可變的,有可能是用一個字節表示一個字符,也可能是兩個,三個.當然最多不能超過3個字節了.反正是根據字符對應的數字大小來確定.
UTF-16任何字符對應的數字都用兩個字節來保存。
C# Stream流的主要用途就是與應用程序外部的文件或者數據源進行數據交互。有文件流FileStream,網絡流NetwrokStream,訪問網絡時InputStream,OutputStream等。流的內部就是對二進制數據的讀取。
流可以一次性讀取,也可以循環讀取。
一次性讀取:
public void Read()
{
string filePath = Environment.CurrentDirectory + "/content.txt";
Stream source = new FileStream(filePath, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[source.Length];
int bytesRead = source.Read(buffer, 0, (int)source.Length);
Output(buffer);
}
循環讀取:
public void ReadLoop()
{
string filePath = Environment.CurrentDirectory + "/content.txt";
string fileDest = Environment.CurrentDirectory + "/dest.txt";
Stream source = new FileStream(filePath, FileMode.Open, FileAccess.Read);
Stream destStream = new FileStream(fileDest, FileMode.Create, FileAccess.Write);
int bufferSize = 10;
byte[] buffer = new byte[bufferSize];
int bytesREad;
do
{
bytesREad = source.Read(buffer, 0, bufferSize);
destStream.Write(buffer, 0, bufferSize);
}
while (bytesREad > 0);
source.Dispose();
destStream.Dispose();
}
StreamReader, StreamWriter。StringReader, StringWriter。他們是流的包裝器類,方便對流的讀取。以下是示例代碼
public void StreamReaderRead()
{
string filePath = Environment.CurrentDirectory + "/content.txt";
Stream source = new FileStream(filePath, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(source);//Stream包裝器類
string text = sr.ReadToEnd();
Console.Write(text);
}
public void StreamWriterWrite()
{
string filePath = Environment.CurrentDirectory + "/content.txt";
string fileDest = Environment.CurrentDirectory + "/dest1.txt";
Stream source = new FileStream(filePath, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(source);//Stream包裝器類
string text = sr.ReadToEnd();
StreamWriter sw = new StreamWriter(fileDest);//Stream包裝器類
sw.Write(text);
sw.Flush();
sw.Close();
}