C#读写文件总结
1、使用FileStream讀寫文件
文件頭:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
讀文件核心代碼:
byte[] byData = new byte[100];
char[] charData = new char[1000];
try
{
FileStream sFile = new FileStream("文件路徑",FileMode.Open);
sFile.Seek(55, SeekOrigin.Begin);
sFile.Read(byData, 0, 100); //第一個參數是被傳進來的字節數組,用以接受FileStream對象中的數據,第2個參數是字節數組中開始寫入數據的位置,它通常是0,表示從數組的開端文件中向數組寫數據,最后一個參數規定從文件讀多少字符.
}
catch (IOException e)
{
Console.WriteLine("An IO exception has been thrown!");
Console.WriteLine(e.ToString());
Console.ReadLine();
return;
}
Decoder d = Encoding.UTF8.GetDecoder();
d.GetChars(byData, 0, byData.Length, charData, 0);
Console.WriteLine(charData);
Console.ReadLine();
寫文件核心代碼:
FileStream fs = new FileStream(文件路徑,FileMode.Create);
//獲得字節數組
byte [] data =new UTF8Encoding().GetBytes(String);
//開始寫入
fs.Write(data,0,data.Length);
//清空緩沖區、關閉流
fs.Flush();
fs.Close();
2、使用StreamReader和StreamWriter
文件頭:
?
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
StreamReader讀取文件:
StreamReader objReader = new StreamReader(文件路徑);
????? string sLine="";
????? ArrayList LineList = new ArrayList();???
????? while (sLine != null)
????? {
??????? sLine = objReader.ReadLine();
??????? if (sLine != null&&!sLine.Equals(""))
????????? LineList.Add(sLine);
????? }
??????????? objReader.Close();
??????????? return LineList;
StreamWriter寫文件:
? FileStream fs = new FileStream(文件路徑, FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
//開始寫入
sw.Write(String);
//清空緩沖區
sw.Flush();
//關閉流
sw.Close();
fs.Close();
===================================================================================
方式一:用FileStream
//實例化一個保存文件對話框
??????????? SaveFileDialog sf = new SaveFileDialog();
??????????? //設置文件保存類型
??????????? sf.Filter = "txt文件|*.txt|所有文件|*.*";
??????????? //如果用戶沒有輸入擴展名,自動追加后綴
??????????? sf.AddExtension = true;
??????????? //設置標題
??????????? sf.Title = "寫文件";
??????????? //如果用戶點擊了保存按鈕
??????????? if(sf.ShowDialog()==DialogResult.OK)
??????????? {
??????????????? //實例化一個文件流--->與寫入文件相關聯
??????????????? FileStream fs = new FileStream(sf.FileName,FileMode.Create);
??????????????? //獲得字節數組
byte [] data =new UTF8Encoding().GetBytes(this.textBox1.Text);
??????????????? //開始寫入
??????????????? fs.Write(data,0,data.Length);
??????????????? //清空緩沖區、關閉流
??????????????? fs.Flush();
??????????????? fs.Close();
??????????? }
方式二:用StreamWriter
//實例化一個保存文件對話框
??????????? SaveFileDialog sf = new SaveFileDialog();
??????????? //設置文件保存類型
??????????? sf.Filter = "txt文件|*.txt|所有文件|*.*";
??????????? //如果用戶沒有輸入擴展名,自動追加后綴
??????????? sf.AddExtension = true;
??????????? //設置標題
??????????? sf.Title = "寫文件";
??????????? //如果用戶點擊了保存按鈕
??????????? if (sf.ShowDialog() == DialogResult.OK)
??????????? {
??????????????? //實例化一個文件流--->與寫入文件相關聯
??????????????? FileStream fs = new FileStream(sf.FileName, FileMode.Create);
??????????????? //實例化一個StreamWriter-->與fs相關聯
??????????????? StreamWriter sw = new StreamWriter(fs);
??????????????? //開始寫入
??????????????? sw.Write(this.textBox1.Text);
??????????????? //清空緩沖區
??????????????? sw.Flush();
??????????????? //關閉流
??????????????? sw.Close();
??????????????? fs.Close();
??????????? }
string FileName = Guid.NewGuid().ToString() + ".txt"; //GUID生成唯一文件名
??????? StringBuilder ckpw = new StringBuilder("\"憑證輸出\", \"V800\", \"001\", \"東風隨州專用汽車有限公司\"," + "\"F89自由項16\", \"F90審核日期:\"");
??????? if (!FileIO.IsFolderExists(Server.MapPath("pzsc")))
??????????? FileIO.CreaterFolder(Server.MapPath(""), "file://pzsc/");
??????? string filePath = Server.MapPath("pzsc") + "\\" + FileName;
??????? System.IO.StreamWriter sw = new System.IO.StreamWriter(filePath, false, Encoding.GetEncoding("GB2312"));//創建的時候需要指定編碼格式,默認是UTF-8,中文顯示亂碼
??????? sw.WriteLine(ckpw.ToString());
??????? sw.Close();
方式三:用BinaryWriter
//實例化一個保存文件對話框
??????????? SaveFileDialog sf = new SaveFileDialog();
??????????? //設置文件保存類型
??????????? sf.Filter = "txt文件|*.txt|所有文件|*.*";
??????????? //如果用戶沒有輸入擴展名,自動追加后綴
??????????? sf.AddExtension = true;
??????????? //設置標題
??????????? sf.Title = "寫文件";
??????????? //如果用戶點擊了保存按鈕
??????????? if (sf.ShowDialog() == DialogResult.OK)
??????????? {
??????????????? //實例化一個文件流--->與寫入文件相關聯
??????????????? FileStream fs = new FileStream(sf.FileName, FileMode.Create);
??????????????? //實例化BinaryWriter
??????????????? BinaryWriter bw = new BinaryWriter(fs);
??????????????? bw.Write(this.textBox1.Text);
??????????????? //清空緩沖區
??????????????? bw.Flush();
??????????????? //關閉流
??????????????? bw.Close();
??????????????? fs.Close();
??????????? }
C#緩存流示例------>用緩存流復制文件
C#文件處理操作必須先導入命名空間:using System.IO;
背景:使用VS2005、一個按鈕、一個窗體、C#緩存流、把D:\KuGoo\愛得太多.wma復制到D:\并更名為love.wma,即:D:\love.wma
在按鈕的Click事件中添加如下代碼:
private void button1_Click(object sender, EventArgs e)
??????? {
??????????? //創建兩個文件流 一個是源文件相關,另一個是要寫入的文件
??????????? FileStream fs = new FileStream(@"D:\KuGoo\愛得太多.wma",FileMode.Open);
??????????? FileStream fs2 = new FileStream(@"D:\love.wma",FileMode.Create);
??????????? //創建一個字節數組,作為兩者之間的媒介
??????????? //好比兩個人拿蘋果,這個字節數組就好比一個籃子,一個人作死的把蘋果送到籃子里面,
??????????? //而我就可以作死得拿蘋果,通過這個媒介我們互不干擾,
??????????? //不需要互相等待【她往籃子里面放了蘋果我才可以去拿】,提高了效率
byte[] data = new byte[1024];
??????????? //創建兩個緩沖流,與兩個文件流相關聯
??????????? BufferedStream bs = new BufferedStream(fs);
??????????? BufferedStream bs2= new BufferedStream(fs2);
??????????? //fs作死的讀,fs2作死的寫,直到fs沒有字節可讀fs2就不寫了
?????????? //好比,一個人作死的往籃子里面丟蘋果,另一個人作死得往籃子里面拿蘋果,直到籃子里面沒有蘋果拿了為止
??????????? //即-->那個人沒有蘋果往籃子里面放了
??????????? while(fs.Read(data,0,data.Length)>0)
??????????? {
??????????????? fs2.Write(data,0,data.Length);
??????????????? fs2.Flush();
??????????? }
??????????? //關閉流,好比兩個人累了,都要休息 呵呵o(∩_∩)o...
??????????? fs.Close();
??????????? fs2.Close();
??????? }
C#內存流示例----->用內存流來讀取圖片
C#文件處理操作必須先導入命名空間:using System.IO;
背景:一個窗體、一個pictureBox、一個lable[沒有選擇圖片,lable的text為"圖片未選擇"],在pictureBox1的Click事件中添加如下代碼:
private void pictureBox1_Click(object sender, EventArgs e)
??????? {
??????????? //實例化一個打開文件對話框
??????????? OpenFileDialog op = new OpenFileDialog();
??????????? //設置文件的類型
??????????? op.Filter = "JPG圖片|*.jpg|GIF圖片|*.gif";
??????????? //如果用戶點擊了打開按鈕、選擇了正確的圖片路徑則進行如下操作:
??????????? if(op.ShowDialog()==DialogResult.OK)
??????????? {
??????????????? //清空文本
??????????????? this.label1.Text = "";
??????????????? //實例化一個文件流
??????????????? FileStream fs = new FileStream(op.FileName, FileMode.Open);
??????????????? //把文件讀取到字節數組
byte[] data = new byte[fs.Length];
??????????????? fs.Read(data, 0, data.Length);
??????????????? fs.Close();
??????????????? //實例化一個內存流--->把從文件流中讀取的內容[字節數組]放到內存流中去
??????????????? MemoryStream ms = new MemoryStream(data);
??????????????? //設置圖片框 pictureBox1中的圖片
??????????????? this.pictureBox1.Image = Image.FromStream(ms);
??????????? }
??????? }
轉載于:https://www.cnblogs.com/wwwzzg168/p/3572105.html
總結
- 上一篇: WindowsTime服务设置
- 下一篇: [转]C#开发ActiveX控件,.NE