You are on page 1of 8

For Better Life!

Learn to change.

c v ghi t p tin b ng C# read and write file with C# .net


Posted on 16/02/2011 by thanhcuong1990

Vic c v ghi ra mt tp tin l vic lm cn thi t trong trng hp chng ta mun in ra kt qu chng trnh ra mt file, ly ni dung t mt file s dng trong chng trnh ca mnh Trong mi trng .net vi ngn ng C# ni ring v cc ngn ng khc ni chung, vic thc hin tng i d dng vi s h tr c lc ca lp trnh by ni dung gi chung l stream. Bi vi t ny s c trnh by ngn gn vi c c v ghi file trong C# da trn cc lp sn c ca .NET, vi mi trng hp s c chng trnh Demo c th vit trn Visual studio 2010. 1. Gii thi u v Stream - c v vit d liu s c thc hin thng qua lp stream. Stream l dng d liu chy i. y l mt thc th (entity) c kh nng nhn c hoc to ra mt nhm d liu. System.IO.Stream l m t lp abstract nh ngha mt s thnh vin chu h tr vic c/vit ng b (synchronus) hoc khng ng b (asynchronous) i vi khi tr tin (ngha l m t tp tin trn a hoc tp tin trn k c). - V Stream l mt lp abstract, nn bn ch c th lm vi c vi nhng lp c dn xut t Stream. Cc hu du ca Stream tng trng d liu nh l m t dng d li u th dng bytes (thay v d li u dng vn bn). Ngoi ra, cc lp c dn xut t Stream h tr vi c truy tm (seek) ngha l mt tin trnh nhn ly v iu ch nh v tr trn mt dng chy. Trc khi tm hiu nhng chc nng m lp Stream cung cp, bn nn xem qua cc thnh vin ca lp Stream. - tng ca stream c t lu. M t stream l mt i tng dng chuyn d liu. D liu c th c truyn theo hai hng: Nu d liu c truyn t ngun bn ngoi vo trong chng trnh ca bn, ta gi l c d liu Nu d liu c truyn t chng trnh ca bn ra ngun bn ngoi , ta gi l vit d liu - Thng th ngun bn ngoi s l mt file, ngoi ra n cn bao gm c trng hp sau: c hoc ghi d liu trn mng dng giao thc mng c hoc ghi n mt ng ng ch nh c hoc ghi n mt vng ca b nh - Cc lp c m i lin h trong namespace System.IO nh hnh sau:

2. Lm vic vi file nh phn (binary files) Reading and writing to binary files thng c lm vic vi lp FileStream . a. Lm vic vi FileStream - Lp FileStream em li vic thi cng cho nhng thnh vin ca lp abstract Stream theo mt th thc thch hp i vi cc file-base streaming ging nh cc lp DirectoryInfo v FileInfo, lp FileStream cho php m nhng tp tin hi n hu cng nh to mi file. Khi to tp tin , lp FileStream thng dng nhng enum FileMode, FileAccess v FileShare.

// t o m t t p tin m i trn th m c lm vi c FileStream myFStream = new FileStream("test.dat", FileMode.OpenOrCreate, FileAccess.ReadWrite);

b. The FileStream Class: FileStream c s dng c v vit d liu vo hoc t mt file. khi to mt FileStream, bn cn 4 phn sau: file bn mun truy xut . mode, cho bi t bn mu n m file nh th no. access, cho bi t bn mu n truy xut file nh th no bn nh c hoc vit file hoc c hai. share access kh nng truy xut file. Enumeration FileMode FileAcess Values Append, Create, CreateNew, Open, OpenOrCreate, or Truncate Read, ReadWrite, or Write.

FileShare

Inheritable, None, Read, ReadWrite, or Write.

3. Lm vi c vi BufferedStream - Khi bn gi hm Read() th m t cng tc c d li u cho y buffer t a c ti n hnh. Tuy nhin, cho c hiu nng, h iu hnh thng phi c trong mt lc mt khi lng ln d li u tm thi tr trn bufer. Buffer hot ng nh mt kho hng. - Mt i tng Bufered stream cho php h iu hnh to buffer ring cho mnh dng, ri c d liu vo hoc vit d liu ln a theo mt khi lng d li u no m h iu hnh thy l c hiu nng. Tuy nhin, bn xng c th n nh chiu di khi d liu. Nhng bn nh cho l buffer s chimd ch trong k c ch khng phi trn a t. Hiu qu s dng n buffer l cic xut nhp d liu chy nhanh hn. - Mt i tng BufferedStream c hnh thnh xung quanh mt i tng Stream m bn to ra trc . Mun s dng n m t BufferedStream bn bt u to mt i t ng Stream thng thng nh trong v d:

stream inputstream = File.OpenRead(@"C;\test\source\folder3.cs "); stream outputstream = File.Openwrite(@"C:test\source\folder3.bak");

- Mt khi bn c stream bnh thng, bn trao i tng ny cho hm constructor ca buffere stream:

BufferedStream bufInput = new BufferedStream(inputstream); BufferedStream bufOutput = new BufferedStream(outputstream);

- Sau , bn s dng BufferedStream nh l mt stream bnh thng, bn triu gi hm Read() hoc Write() nh bn lm trc kia. H iu hnh lo vic qun l vng m:

while ((bytesRead = bufInput.Read(buffer, 0, SIZE_BUFF)) > 0) { bufOutput.Write(buffer, 0, bytesRead); }

- Ch c mt khc bit m bn phi nh cho l phi tun ghi (flush) ni dung ca buffer khi bn mun bo m l d liu c ghi ln a.

bufOutput.Flush();

- Lnh trn bo h iu hnh ly ton b d liu trn buffer cho tun ra ghi ln tp tin trn a.

4. Lm vi c vi nhng tp tin vn bn - Nu bn bit file bn ang lm vic (c/vit) thuc loi vn bn ngha l d liu kiu string, th bn nn ngh n vic s dng n cc lp StreamReader v StreamWriter. C hai lp theo mc nhin lm vi c vi k t Unicode. Tuy nhin bn c th thay i iu ny bng cch cung cp m t i tng quy chiu c cu hnh mt cch thch hp theo System.Text.Reference. Ni tm li hai lp ny c thit k thao tc d dng cc tp tin loi vn bn. - Lp StreamReader c dn xut t mt lp abstract mang tn TextReader cng gi ng nh String Reader. Lp c bn TextReader cung cp mt s chc nng hn ch cho mi hu du, c bit kh nng c v li c nhn (peek) ln m t dng k t (character stream). - Lp StreamWriter v StringWriter cng c dn xut t mt lp abstract mang tn TextWriter; lp ny nh ngha nhng thnh vin cho php cc lp dn xut vi t nhng d liu vn bn ln mt dng vn bn no . - Cc hm thnh vin ca lp TextWriter Close() Flush() Cho ng li cc writer v gi i phng mi ngu n lc chi m dng Cho xo sch tt c cc buffer i vi writer hi n hnh Thuc tnh ny dng lm hng sang hng Vit mt hng ln text stream khng c newline constant Vit mt hng ln text stream c newline constant

NewLine Write()

WriteLine()

V d c, vit m t tp tin vn bn: - V d ReadWriteText trnh by cch s dng ca lp StreamReader v StreamWriter. N trnh by file c c vo v hi n th N cng c th lu file. N s lu bt k file nh dng Unicode . - Mn hnh trnh by ReadWriteText c dng hin th chng trnh demo. Chng ta c th c c nhi u nh dng file khc. - Chng ta nhn vo on m sau. Trc tin ta thm cu lnh using , T y bn cnh System.IO, chng ta s dng lp StringBuilder t System.Text namespace xy dng chui trong textbox:

using System.Text; using System.IO;

- Ti p theo chng ta thm cc trng cho lp main form:

public partial class Form1 : Form { private OpenFileDialog FileOpen = new OpenFileDialog(); private string chooseFile;

- Chng ta cng cn thm vi chun m Windows Forms thc hin iu khi n cho menu v h p thoi:

public Form1() { InitializeComponent(); this.MaximizeBox = false; this.StartPosition = FormStartPosition.CenterScreen; FileOpen.FileOk += new CancelEventHandler(FileOpen_FileOk); } private void openToolStripMenuItem_Click(object sender, EventArgs e) { FileOpen.ShowDialog(); } void FileOpen_FileOk(object sender, CancelEventArgs e) { chooseFile = FileOpen.FileName; this.Text = Path.GetFileName(chooseFile); DisplayFile(); }

- T y chng ta thy mi khi ngi s dng nhn OK chn mt file trong hp thoi, chng ta gi phng thc DisplayFile(), dng c file.

private void DisplayFile() { int nCols = 16; FileStream inStream = new FileStream(chooseFile, FileMode.Open, FileAccess.Read); long nBytesToRead = inStream.Length; if (nBytesToRead > 65536 / 4) nBytesToRead = 65536 / 4; int nLines = (int)(nBytesToRead / nCols) + 1; string[] lines = new string[nLines]; int nBytesRead = 0; for (int i = 0; i < nLines; i++) { StringBuilder nextLine = new StringBuilder(); nextLine.Capacity = 4 * nCols; for (int j = 0; j < nCols; j++) { int nextByte = inStream.ReadByte(); nBytesRead++; if (nextByte < 0 || nBytesRead > 65536) break; char nextChar = (char)nextByte; if (nextChar < 16) nextLine.Append(" x0" + string.Format("{0,1:X}", (int)nextChar)); else if (char.IsLetterOrDigit(nextChar) || char.IsPunctuation(nextChar)) nextLine.Append(" " + nextChar + " "); else nextLine.Append(" x" + string.Format("{0,2:X}", (int)nextChar)); } lines[i] = nextLine.ToString(); } inStream.Close(); richTextBox.Lines = lines; }

- Nh vy chng ta m c file nh phng thc DisplayFile(). by gi chng ta x l cch lu file chng ta thm on m SaveFile(). Bn nhn vo phng thc SaveFile() chng ta vit mi dng ra textbox, bng stream StreamWriter

void SaveFile() { StreamWriter sw = new StreamWriter(chooseFile, false, Encoding.Unicode); foreach (string line in richTextBox.Lines) sw.WriteLine(line); sw.Close(); }

- By gi ta xem xt lm th no file c c vo. Trong qu trnh x l thc s chng ta khng bit c bao

nhiu dng s c cha. Chng ta gii quyt vn ny bng cch ban u c file vo trong lp i din StringCollection, c nm trong System.Collections.Specialized namespace. Lp ny c thit k gi mt b ca chui c th c m rng mt cch linh hot. N thc thi hai phng thc : Add(), n thm m t chui vo b chn la (collection) , v CopyTo(), n sao chp string collection vo trong mt mng. Mi thnh phn ca i tng StringCollection object s gi 1 hng ca file. - By gi chng ta s xem xt phng thc ReadFileIntoStringCollection() . Chng ta s dng StreamReader c trong mi hng. Kh khn chnh l cn m k t c chc chng ta khng vt qu kh nng cha ng ca textbox:

private StringCollection ReadFileIntoStringCollection() { const int MaxBytes = 65536; StreamReader sr = new StreamReader(chooseFile); StringCollection result = new StringCollection(); int nBytesRead = 0; string nextLine; while ((nextLine = sr.ReadLine()) != null) { nBytesRead += nextLine.Length; if (nBytesRead > MaxBytes) break; result.Add(nextLine); } sr.Close(); return result; }

- n y on m c hon thnh. Click vo y download chng trnh demo c v ghi tp tin ra file txt vit trn visual studio 2010 (Tham kh o K thut Lp trnh C# 2.0) Rate This

Chia s bi vit ny cho bn b

Share

About thanhcuong1990 Handsome View all posts by thanhcuong1990

This entry was pos ted in C#. Bookmark the permalink.

Like

Be the first to like this post.

For Better Life!

Theme: Twenty Ten

Blog at WordPress.com.

You might also like