Professional Documents
Culture Documents
Learn to change.
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.
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
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:
- Mt khi bn c stream bnh thng, bn trao i tng ny cho hm constructor ca buffere stream:
- 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:
- 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:
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
Share
Like
Blog at WordPress.com.