天天看點

C#讀寫檔案總結

1、使用filestream讀寫檔案

檔案頭:

[csharp] 

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);  

寫檔案核心代碼:

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

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();  

===================================================================================

方式一:用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);  

方式二:用streamwriter

if (sf.showdialog() == dialogresult.ok)  

filestream fs = new filestream(sf.filename, filemode.create);  

//執行個體化一個streamwriter-->與fs相關聯  

sw.write(this.textbox1.text);  

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());  

方式三:用binarywriter

//執行個體化binarywriter  

binarywriter bw = new binarywriter(fs);  

bw.write(this.textbox1.text);  

bw.flush();  

bw.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...  

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);  

//執行個體化一個記憶體流--->把從檔案流中讀取的内容[位元組數組]放到記憶體流中去  

memorystream ms = new memorystream(data);  

//設定圖檔框 picturebox1中的圖檔  

this.picturebox1.image = image.fromstream(ms);  

}