using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO; //引入
namespace VA18.__數(shù)據(jù)流概述
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//Stream 所有流的父類
//FileStream fs = File.Open(); //返回 FileStream
//FileStream fs = File.OpenRead(); //返回只讀的FileStream
//FileStream fs = File.OpenWrite(); //返回只寫的FileStream
//FileStream fs = new FileStream(參數(shù)); //返回 FileStream
}
#region 1.FileStream數(shù)據(jù)流讀取
/// <summary>
/// 1.FileStream數(shù)據(jù)流讀取
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnFileStreamRead_Click(object sender, EventArgs e)
{
//1將string轉(zhuǎn)byte數(shù)組轉(zhuǎn)換為一個字符串
string msg = "將一字符串轉(zhuǎn)為byte數(shù)組";
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(msg);
string newmsg = System.Text.Encoding.UTF8.GetString(bytes);
//第一種方法讀取
// 2通過FileStream來讀文件
//創(chuàng)建文件流
using (FileStream fsRead = new FileStream(@"D:\桌面文件\新建文本文檔.txt", FileMode.OpenOrCreate, FileAccess.Read))
{
byte[] bytsRead = new byte[fsRead.Length];
//讀取文件 fsRead.Length 小文件可以指定文件總字節(jié) 讀取到bytsRead數(shù)據(jù)中
fsRead.Read(bytsRead, 0, bytsRead.Length);
//將bytsRead數(shù)組轉(zhuǎn)換為字符串
string msgRead = System.Text.Encoding.UTF8.GetString(bytsRead);
}
//第二種方法讀取
//文件流的使用步驟
string sql = "" ;
byte[] bufferByte = new byte[100];
char[] buffchar = new char[100];
//1.創(chuàng)建文件流
FileStream fsReadWrite = new FileStream(@"D:\桌面文件\新建文本文檔.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
//2.使用文件,執(zhí)行讀操作
fsReadWrite.Seek(0, SeekOrigin.Begin); //從開始位置讀取
fsReadWrite.Read(bufferByte, 0, 100); //讀取文件字節(jié)
Decoder dc = Encoding.UTF8.GetDecoder(); //解碼
dc.GetChars(bufferByte, 0, bufferByte.Length, buffchar, 0);
foreach (char str in buffchar)
{
sql += str;
}
fsReadWrite.Dispose();
MessageBox.Show("讀取" + sql.ToString());
}
#endregion
#region 2.FileStream數(shù)據(jù)流寫入
/// <summary>
/// 2.FileStream數(shù)據(jù)流寫入
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnFileStreamWrite_Click(object sender, EventArgs e)
{
//第一種方法寫入
// 1通過FileStream來寫文件
//1.創(chuàng)建文件流
FileStream fsWrite1 = new FileStream(@"D:\桌面文件\新建文本文檔.txt", FileMode.Create, FileAccess.Write);
//2.使用文件流,執(zhí)行讀寫操作
string msgf = "今天下雨了!";
byte[] bytsWrite = System.Text.Encoding.UTF8.GetBytes(msgf);
//寫入 參數(shù)1:表示將指定的字節(jié)數(shù)組中的內(nèi)容寫入文件 參數(shù)2:參數(shù)的數(shù)組的偏移量,一般為0 參數(shù)3:本次文件寫入操作要寫入的實際的字節(jié)個數(shù)
fsWrite1.Write(bytsWrite, 0, bytsWrite.Length);
//3.清空緩沖區(qū) 關(guān)閉文件流 釋放資源 fsWrite.Flush(); fsWrite.Close(); 可不寫 Dispose會向上調(diào)用
fsWrite1.Dispose();
//第二種方法寫入
try
{
FileStream fsWrite = new FileStream(@"D:\桌面文件\新建文本文檔.txt", FileMode.OpenOrCreate, FileAccess.Write);
//寫入
char[] buffchar = new char[100];
byte[] bufferByte = new byte[100];
buffchar = "寫入文字".ToCharArray();
Encoder en = Encoding.UTF8.GetEncoder();
en.GetBytes(buffchar, 0, buffchar.Length, bufferByte, 0, true);
fsWrite.Seek(fsWrite.Length, SeekOrigin.Begin); //從開始位置讀取
fsWrite.Write(bufferByte, 0, bufferByte.Length);
fsWrite.Close();
fsWrite.Dispose();
}
catch (Exception ex)
{
MessageBox.Show("發(fā)生異常,原因:" + ex.ToString());
}
}
#endregion
#region 3.數(shù)據(jù)流大文件拷貝
/// <summary>
/// 數(shù)據(jù)流大文件拷貝
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnFileStreamCopy_Click(object sender, EventArgs e)
{
string source = @"D:\桌面文件\9.大文件拷貝.avi";
string target = @"D:\桌面文件\拷貝.avi";
BigFileCopy(source, target);
}
/// <summary>
/// 通過文件流實現(xiàn)將source中的文件拷貝到target
/// </summary>
/// <param name="source"></param>
/// <param name="target"></param>
private void BigFileCopy(string source, string target)
{
//1 創(chuàng)建一個讀取源文件的流
using (FileStream fsRead = new FileStream(source, FileMode.Open, FileAccess.Read))
{
//2 創(chuàng)建一個寫入新文件的文件流
using (FileStream fsWrit = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write))
{
//拷貝文件的時候,創(chuàng)建的一個中間緩沖區(qū)5MB
byte[] bytes = new byte[1024 * 1024 * 5];
//返回值表示本次實際讀取到的字節(jié)個數(shù)
//把filestream的對象看作是一個 臨時的文件內(nèi)容存儲區(qū),
//而自定義的 byte數(shù)組則是我們的數(shù)據(jù)倉庫,
//那么,每次filestream執(zhí)行一次read之后,被read到的內(nèi)容可以簡單看作是 剪切并粘貼到了 我們自定義的byte數(shù)組中。
int r = 0;
while ((r = fsRead.Read(bytes, 0, bytes.Length)) > 0)
{
//將讀取到的內(nèi)容寫入到新文件中
fsWrit.Write(bytes, 0, r);
//拷貝進(jìn)度百分比
double d = (fsWrit.Position / (double)fsRead.Length) * 100;
}
}
}
}
#endregion
//1根據(jù)基礎(chǔ)數(shù)據(jù)或存儲庫 流可能只支持這些功能中的一部分
//2用戶通過使用 CanRead CanWrite 和 CanSeek 屬性 可實現(xiàn)應(yīng)用程序查詢流的功能
//Read 和 Write 方法讀寫各種不同格式的數(shù)據(jù) 對于支持查找的流 使用Seek 和 SetLegth方法及 Position 和Length 屬性
//可以查詢和修改流的當(dāng)前位置 和長度
//Push 清除內(nèi)部緩存區(qū) 并確保將所有數(shù)據(jù)寫入基礎(chǔ)源或存儲庫
//Close 也會釋放操作系統(tǒng)資源
//BufferedStream 類提供了將一個經(jīng)過緩沖的流環(huán)另一個流功能 ,以便提高讀寫性能
//在實現(xiàn)Stream的派生類時,必須提供Read 和 Write 方法的實現(xiàn)
//異步方法對 BeginRead EndRead BeginWrite 和 EndWrite 通過同步方法Read 和 Write實現(xiàn)
//同樣 Read 和 write 的實現(xiàn)已將與異步方法一起正常工作
//readByte 和 WriteByte 的默認(rèn)實現(xiàn)創(chuàng)建一個新的單元素字節(jié)數(shù)組
//然后調(diào)用Read 和 Write 的實現(xiàn), 從Stream 派生時 如果有內(nèi)部緩沖區(qū),這樣性能將得到提供
//CanRead CanSeek CanWrite flush length position seek setLength 不要重寫Close 方法,
//而將所有流清理邏輯放入 Dispose方法
//C# 語言中提供的主要數(shù)據(jù)流有 NetWorkStream 網(wǎng)路流 BufferedStream 緩沖區(qū)流 MemonryStream 內(nèi)在流
//FileStream 文件流 CryptoStream 加密流 等 .
//StreamWrite類
//StreamWrite sw=new StreamWriter(string path,bool append);
//bool append false 表示產(chǎn)創(chuàng)建一個新文件或現(xiàn)有文件并將其打開 true 標(biāo)示打開文件,保留原來的數(shù)據(jù)
//常用的方法
//Close 關(guān)閉當(dāng)前StreamWrite對象和基礎(chǔ)流
//Dispose 釋放使用的資源
//Flush 清理當(dāng)前編寫器的所有緩沖區(qū) 并使所有緩沖數(shù)據(jù)寫入基礎(chǔ)流
//Write 寫入流
//WriteLine 寫入指定的某些數(shù)據(jù) 后跟行結(jié)束符
//創(chuàng)建方法2種
//1.先創(chuàng)建FileStream 類 再創(chuàng)建StreamReader 類
//FileStream fs=new FileStream (string Path,FileMode mode);
//StreamReader sr=new StreamReader (fs);
////2.直接創(chuàng)建StreamReader 類
//StreamReader sr=new StreamReader (stirng path);
//Close
//Dispose
//Peek 返回下個可用字符
//Read 讀取輸入流中的下一個字符或下組字符
//readLine 從數(shù)據(jù)流中亣
/// <summary>
/// 4.StreamReader大文本讀取 逐行讀取文本文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnTxtStreamReader_Click(object sender, EventArgs e)
{
if (File.Exists(@"D:\桌面文件\新建文本文檔.txt"))
{
//using() 自動幫我們釋放流所占用的空間
using (StreamReader sr = new StreamReader(@"D:\桌面文件\新建文本文檔.txt",Encoding.Default ))
{
string line = null;
while ((line = sr.ReadLine() ) != null)
{
MessageBox.Show(line.ToString());
}
}
}
else
{
MessageBox.Show("文件不存在");
}
}
/// <summary>
/// 5.StreamReader大文本寫入
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnTxtStreamWriter_Click(object sender, EventArgs e)
{
//操作文件路徑
string path = @"D:\桌面文件\新建文本文檔.txt";
try
{
//第一種方式
//FileStream fs = new FileStream(path, FileMode.OpenOrCreate);
//StreamWriter sw = new StreamWriter(fs);
//第二種方式
//false 表示產(chǎn)生創(chuàng)建一個新文件或現(xiàn)有文件并將其打開
//true 表示打開 保留原本數(shù)據(jù)
string mystr = "寫入一行文字";
using ( StreamWriter sw = new StreamWriter(path, true,Encoding.Default )){
sw.WriteLine(mystr);
}
MessageBox.Show("寫入完成!");
}
catch (Exception ex)
{
MessageBox.Show("發(fā)生異常,原因:" + ex.ToString());
}
}
//文件選擇之OpenFileDialog控件
private void button5_Click(object sender, EventArgs e)
{
openFileDialog1.InitialDirectory = @"D:\桌面文件\source";
//文件過濾
openFileDialog1.Filter = "文本文件(*.txt)|*.txt|*.wmv";
openFileDialog1.FilterIndex = 3;
openFileDialog1.Title = "OpenFileDialog控件"; //默認(rèn)標(biāo)題
openFileDialog1.FileName = "文件名稱"; //默認(rèn)文件
openFileDialog1.ShowHelp = true;
if (openFileDialog1.ShowDialog() == DialogResult.OK) {
textBox1.Text = "";
// 獲取文件名
string fName = openFileDialog1.FileName;
string fileCon = "";
StreamReader sr = new StreamReader(fName, System.Text.Encoding.GetEncoding("gb2312"));
while ((fileCon = sr.ReadLine()) != null)
{ textBox1.Text += fileCon+"\r\n";
}
sr.Close ();
}
}
//文件保存 saveFileDialog
private void button6_Click(object sender, EventArgs e)
{
saveFileDialog1.InitialDirectory = @"D:\桌面文件\source";
saveFileDialog1.Filter = " 97-2003Word文檔(*.doc)|*.doc)|文本文件(*.txt)|*.txt";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.FileName = "51zxw.txt";
//Convert.ToString(DateTime.Now.Ticks);
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
string fName = saveFileDialog1.FileName;
FileStream fs = File.Open(fName ,FileMode.Create); //可追加
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(textBox1.Text );
sw.Close();
fs.Close();
}
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
//文件夾選擇之FolderBrowserDialog控件 添加 TXT文件
private void button7_Click(object sender, EventArgs e)
{
folderBrowserDialog1.Description = "請選擇一個包含TXT格式的文件夾";
folderBrowserDialog1.RootFolder = Environment.SpecialFolder.Desktop;
folderBrowserDialog1.ShowNewFolderButton = false;
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
string fileName = folderBrowserDialog1.SelectedPath; //用戶選擇的路徑
string[] Files = Directory.GetFiles(fileName ); // 獲取目標(biāo)下的子文件
foreach (string str in Files) {
int i = str.LastIndexOf('.');
string s = str.Substring(str.LastIndexOf('.') + 1).ToLower();
if (str.Substring(str.LastIndexOf('.') + 1).ToLower() == "txt") {
string filename = System.IO.Path.GetFileName(str);//文件名 “Default.aspx”
string extension = System.IO.Path.GetExtension(str);//擴(kuò)展名 “.aspx”
string fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(str);// 沒有擴(kuò)展名的文件名 “Default”
textBox1.AppendText(filename + "\r\n");
textBox1.AppendText(str+"\r\n");
}
}
}
}
private void button8_Click(object sender, EventArgs e)
{
folderBrowserDialog1.Description = "請選擇一個包含TXT格式的文件夾";
folderBrowserDialog1.RootFolder = Environment.SpecialFolder.Desktop;
folderBrowserDialog1.ShowNewFolderButton = false;
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
string fileName = folderBrowserDialog1.SelectedPath; //用戶選擇的路徑
string[] Files = Directory.GetFiles(fileName); // 獲取目標(biāo)下的子文件
foreach (string str in Files)
{
int i = str.LastIndexOf('.');
string s = str.Substring(str.LastIndexOf('.') + 1).ToLower();
if (str.Substring(str.LastIndexOf('.') + 1).ToLower() == "docx")
{
textBox1.AppendText(str + "\r\n");
}
}
}
}
private void button10_Click(object sender, EventArgs e)
{
}
}
}
聯(lián)系客服