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