c#写文件9 q2 d: G2 G. x9 ?. J+ G
2 F5 |& [0 {( e7 n' x
C#文件处理操作必须先导入命名空间:using System.IO; 6 l' n6 s7 }6 q6 ?5 I
//实现背景:一个文本框、一个按钮、VS2005
3 s& D) k& a7 u. ]% j: P0 G- `) M/ K4 W: E8 Q' N0 u: t
方式一:用FileStream: [& I( ^, x2 T2 |
- P) j7 S9 U* A9 @! j; b
//实例化一个保存文件对话框3 [% q% M1 B# }3 K0 A) R
SaveFileDialog sf = new SaveFileDialog();
+ w' h; J ]" T6 \. m& B+ R" ^# w' K //设置文件保存类型- Y" ]8 M* e% J& E. U2 ]
sf.Filter = "txt文件|*.txt|所有文件|*.*";
1 I0 ?4 V. C$ p //如果用户没有输入扩展名,自动追加后缀
- W% T+ c5 u) o, Y1 }( ?. h sf.AddExtension = true;
/ J9 a' C7 ~/ u9 l+ a# y# G% Q% y //设置标题2 n4 P; W0 a% G+ u
sf.Title = "写文件";
8 z6 e; e. G# L/ u- ~% C7 I //如果用户点击了保存按钮
8 u* t8 s5 s: _+ r if(sf.ShowDialog()==DialogResult.OK)/ E5 X1 S, A3 w, e
{8 X$ O4 b/ n5 I1 r& W- E
//实例化一个文件流--->与写入文件相关联$ C, p& g4 |9 N' o. w6 s
FileStream fs = new FileStream(sf.FileName,FileMode.Create);. F. Y( c2 l u
//获得字节数组: v/ n4 \% F5 ^/ R2 P: W! V+ _1 G
byte [] data =new UTF8Encoding().GetBytes(this.textBox1.Text);6 W7 h2 U* }' x( u- M/ L
//开始写入- q& l) P1 e. _3 G* q" c
fs.Write(data,0,data.Length);
' F: U5 p3 `; g! y! Z# a3 d7 t //清空缓冲区、关闭流
* \) \ h/ t q% Z3 ]' Q8 g' { fs.Flush();
7 r& P" i5 n" \ fs.Close();
, K7 B4 E/ J4 b+ X" o0 J; S+ g* T' E
}
% J. _0 c* a/ H2 ~/ y. w3 ~5 H2 ~% P6 A2 l
方式二:用StreamWriter& u' n. v& i7 b6 N% m, L
: @5 i: G9 v; A& q& d//实例化一个保存文件对话框9 h4 X: p8 P; T7 V: {" V: T
SaveFileDialog sf = new SaveFileDialog();* r5 I }, A- J4 Z- }; l) ` L; P: V6 }
//设置文件保存类型5 J) O' `8 ~8 a- R
sf.Filter = "txt文件|*.txt|所有文件|*.*";
( H5 u' E$ y9 ~4 b6 _: i+ C //如果用户没有输入扩展名,自动追加后缀/ U! j- ^/ M2 x" A2 F
sf.AddExtension = true;
1 x( Y8 s" @% J' t# t* N+ \5 U //设置标题
5 X# M# |1 X; a1 ?" j$ G5 N sf.Title = "写文件";
, W/ h8 w; w- C: t5 @ //如果用户点击了保存按钮
; x5 L2 o% W1 b5 S) t0 u3 q if (sf.ShowDialog() == DialogResult.OK)
" ~* H' N* ?+ O' p; M {' C% |( a' f* s" ?9 X" w
//实例化一个文件流--->与写入文件相关联
, j3 ~4 _! e; G3 Y1 @- z FileStream fs = new FileStream(sf.FileName, FileMode.Create);# w( K; n) m: `# G: d' y: s
//实例化一个StreamWriter-->与fs相关联
% \/ `" g: u+ l, r2 ^2 V. y StreamWriter sw = new StreamWriter(fs);
8 ]% ^7 l, j6 K0 L //开始写入
& W/ y; h( d( F5 u sw.Write(this.textBox1.Text);3 G6 `6 c! q! M
//清空缓冲区
( B/ @% g; R; ?: M sw.Flush();
, W, W. @/ ~# J; Z6 Z" p# Q //关闭流' m1 g/ |+ m, t) f$ }
sw.Close();
8 l$ S) f2 ]9 G( m$ ?7 Y fs.Close();/ W4 z. @+ L, j* t
}# X. y4 t+ q; ] y* Y. } e
6 l5 N l. `( j, j, N0 r% v6 l2 V方式三:用BinaryWriter% q1 \7 ~/ ]. r3 b
# |. m- \& G- J1 A8 J
//实例化一个保存文件对话框
+ @- Q1 S+ b( A3 R SaveFileDialog sf = new SaveFileDialog();- Z- T/ V I {+ C/ \
//设置文件保存类型
" C( a1 t$ h0 A3 V( L3 Y9 U% x sf.Filter = "txt文件|*.txt|所有文件|*.*";
9 J. B8 b3 U' E: I0 _+ E4 h' N //如果用户没有输入扩展名,自动追加后缀
3 _' L& r2 v/ P7 f sf.AddExtension = true;
+ v3 ]3 w6 U$ T0 L //设置标题
. X% M2 |' M- { sf.Title = "写文件";7 h, B/ y5 {6 Y6 t2 b
//如果用户点击了保存按钮
/ }9 I8 @4 d6 T3 b H8 R if (sf.ShowDialog() == DialogResult.OK)
2 o& d: F8 H2 I1 O* |1 S7 `/ d {0 J3 g8 A9 d( W1 R$ _
//实例化一个文件流--->与写入文件相关联
+ Q9 w3 _* O9 K Y Q2 H, C1 t6 t' _) K FileStream fs = new FileStream(sf.FileName, FileMode.Create);
# G- B9 ^' {# K4 s/ J' y4 `# s //实例化BinaryWriter; d8 U/ h# |6 y
BinaryWriter bw = new BinaryWriter(fs);
* w6 \; N4 |/ u% `+ z5 l bw.Write(this.textBox1.Text);/ r; k5 z3 e7 A
//清空缓冲区4 e# x. s( | y0 P
bw.Flush();
0 C6 X' `7 @ U$ \ //关闭流
% S( u4 n9 q( k3 m bw.Close();
6 T1 G% c4 W4 P# y: ^ fs.Close();$ m; V: m7 w) q3 r& d; v; T: V- i
}
8 V8 u! i% Q" Z+ w) B+ Z) R
( a C/ K8 b' y' D- q# RC#缓存流示例------>用缓存流复制文件
3 h7 a6 ?1 `8 |, K0 U3 ]. i3 e# S# D" q
C#文件处理操作必须先导入命名空间:using System.IO;
% T$ B4 a% h0 m' U1 a6 A# R( l r# u) G& Y7 h6 c" j, L* @
背景:使用VS2005、一个按钮、一个窗体、C#缓存流、把D:\KuGoo\爱得太多.wma复制到D:\并更名为love.wma,即:D:\love.wma
" V/ V! E2 @9 q- r
4 d6 C% b! ]" x5 T0 K% l* e! w5 p在按钮的Click事件中添加如下代码:
. @* w- t" ]. G$ X2 o# F$ |& f6 m, J b' c
private void button1_Click(object sender, EventArgs e)/ _' L+ X9 u: v/ ?# E( D! a. e
{8 ^" Y' n( _! O& O) g+ H4 d
//创建两个文件流 一个是源文件相关,另一个是要写入的文件4 p! t5 U% r: s5 o* x
FileStream fs = new FileStream(@"D:\KuGoo\爱得太多.wma",FileMode.Open);
' a' a5 F+ w8 l: Z$ x FileStream fs2 = new FileStream(@"D:\love.wma",FileMode.Create);
! Y$ t( H4 Q B9 d, E) a I# D //创建一个字节数组,作为两者之间的媒介
9 {8 B& [+ L8 e' T //好比两个人拿苹果,这个字节数组就好比一个篮子,一个人作死的把苹果送到篮子里面,/ z. K) o6 K8 Z7 I/ p8 V
//而我就可以作死得拿苹果,通过这个媒介我们互不干扰,
$ _9 @. x9 A( Z //不需要互相等待【她往篮子里面放了苹果我才可以去拿】,提高了效率/ N1 H9 \: w) c; i0 w& z
byte[] data = new byte[1024];3 ?" S+ |! K- W+ s# x
//创建两个缓冲流,与两个文件流相关联
`) m( m, i' T2 n9 @' V- e BufferedStream bs = new BufferedStream(fs);
3 M1 s2 \; g4 g4 f0 D7 y% M7 l BufferedStream bs2= new BufferedStream(fs2);
1 s @# e9 S/ ^2 ^+ d) g4 V //fs作死的读,fs2作死的写,直到fs没有字节可读fs2就不写了
1 p4 D* G5 D3 e" c) N //好比,一个人作死的往篮子里面丢苹果,另一个人作死得往篮子里面拿苹果,直到篮子里面没有苹果拿了为止
0 ]$ l4 Q8 b, Q K7 q3 t$ }: B //即-->那个人没有苹果往篮子里面放了
$ d# j, |7 C* [5 I( | while(fs.Read(data,0,data.Length)>0)/ O' ~- e1 M: t' J9 O4 {
{
$ D; i6 {. I2 V7 x3 k fs2.Write(data,0,data.Length);
' {$ N f9 t6 l5 N) V% _! I2 F- ~ fs2.Flush();* A, Z. p" I# b* F2 Z
}
5 z' h3 P4 i/ H //关闭流,好比两个人累了,都要休息 呵呵o(∩_∩)o...
& w( }7 J- S( @! E fs.Close();
$ t# i% x) |' Y, x6 A fs2.Close();( R. M( ?4 |/ l( I2 b. }
}0 o9 E6 w( K' S2 m
& D! X: R( D, f) _' w1 e
/ r e# \* \+ ]% u% HC#内存流示例----->用内存流来读取图片
: F) X' D" i5 L6 K9 rC#文件处理操作必须先导入命名空间:using System.IO;5 P; V: [+ {7 m$ V+ _ z! Z( q( G
+ K' p& m$ G6 p X- ? Z W6 J背景:一个窗体、一个pictureBox、一个lable[没有选择图片,lable的text为"图片未选择"],在pictureBox1的Click事件中添加如下代码:5 D+ u0 v# k7 b, z4 d( ~. v
" X o- D7 e2 U" Q) s) V0 xprivate void pictureBox1_Click(object sender, EventArgs e)
4 g4 l# C' p$ E7 q# A {
2 R; s8 x4 T. R8 ]% ^) k //实例化一个打开文件对话框4 b/ p9 @2 C1 j7 M0 F$ G% e
OpenFileDialog op = new OpenFileDialog();
}9 T5 V1 Z( t+ s+ f% | //设置文件的类型
' T# r& |" u0 B, { op.Filter = "JPG图片|*.jpg|GIF图片|*.gif";. g/ ]* Z& V; B: c& N0 H0 ~& h, b( r
//如果用户点击了打开按钮、选择了正确的图片路径则进行如下操作:! e5 K# w+ Q5 ^) Z- \/ Q
if(op.ShowDialog()==DialogResult.OK)( w3 e& t4 x5 ?# w
{
* H- r$ o8 F/ E //清空文本
( O" \$ u7 @- F; Y this.label1.Text = "";7 W+ x. v% Y# `4 Q- ^
//实例化一个文件流
, z4 h( y1 g( n9 Y7 Z7 ]) F FileStream fs = new FileStream(op.FileName, FileMode.Open);
+ X/ h. S: D3 u% H0 B* E# n9 C //把文件读取到字节数组: T3 N- k, ^! ^" p6 s7 G7 m4 _
byte[] data = new byte[fs.Length];
! r) I) e2 U& l( `2 F/ D1 w- S" M( Q% u fs.Read(data, 0, data.Length);& o$ K. r- P( w& E
fs.Close();! ]3 F4 X. E! H# h( ^4 s* W0 _! E
, g) e2 z' I6 q6 {
//实例化一个内存流--->把从文件流中读取的内容[字节数组]放到内存流中去
; p9 |3 U2 E0 h! F8 J/ i+ u1 n MemoryStream ms = new MemoryStream(data);+ m5 c; C$ x; Z! ~+ D
//设置图片框 pictureBox1中的图片
9 Y: P, M8 P7 W- P! C' H this.pictureBox1.Image = Image.FromStream(ms);6 S S- L* _+ l" F+ X' V s
}& J& D' [- [- ?5 x$ O" [
6 t! ^# v! H3 [! a" k } |