c#写文件7 r% a! K7 f3 @% B( V
9 O# T; N6 F! O# k$ C1 c5 v8 b4 A5 iC#文件处理操作必须先导入命名空间:using System.IO; ) ?, u! b7 e- y% a3 ~+ |
//实现背景:一个文本框、一个按钮、VS2005
+ n: v7 k2 | W2 x2 u* Q6 A4 c
8 _) \5 H# H) Y W. y2 K方式一:用FileStream: S) x2 X- O- z- G& J4 N- F$ E
6 ], _$ b4 x6 z& N//实例化一个保存文件对话框+ I! B6 q' q8 V
SaveFileDialog sf = new SaveFileDialog();
: V- p3 \+ ?1 b* i4 q //设置文件保存类型" F ~8 y% F s: ]
sf.Filter = "txt文件|*.txt|所有文件|*.*";! N0 S) ?2 l. N
//如果用户没有输入扩展名,自动追加后缀5 i7 b" Q3 o5 W, U
sf.AddExtension = true;
! b! G1 z+ ?6 A# s9 b/ r! G //设置标题2 F$ g$ F3 g$ z, _# P, c% [$ E9 F/ ?
sf.Title = "写文件";
. s. I; n# \% g7 j9 D. |+ `, Q //如果用户点击了保存按钮
% i* H1 |8 B+ w/ e if(sf.ShowDialog()==DialogResult.OK)% v. [2 ~/ v3 E* F4 ^- h% I( v
{4 g. S4 d' e9 a. A3 S* U5 C
//实例化一个文件流--->与写入文件相关联
5 W8 ]+ O& @* }( L$ I FileStream fs = new FileStream(sf.FileName,FileMode.Create);: g( \7 Y/ I; h/ y. Q9 r
//获得字节数组
' @, [3 a: \# Z6 E byte [] data =new UTF8Encoding().GetBytes(this.textBox1.Text);) f* r' t" i3 `( h$ J0 A! X+ O
//开始写入
: K3 E" r1 _" G% B& E. j$ I fs.Write(data,0,data.Length);2 P! u6 X5 a0 Z W: N
//清空缓冲区、关闭流# B1 b. S/ W! ?3 p5 r
fs.Flush();
7 M! d( L& a) X1 X0 S5 h L! C fs.Close();( c* f) i+ [. i. _# v
: ?! Y) X) F9 v2 C
}
, r2 m1 m/ Z2 w9 ?8 z: X5 ^* A1 K& V8 W9 h Z4 R3 N1 K
方式二:用StreamWriter
4 f. e! o' z/ q3 L R! m
. |# W% J6 A$ K' B//实例化一个保存文件对话框: r) {& z$ [, G% Z0 Z& @) A
SaveFileDialog sf = new SaveFileDialog();. g8 U* C1 L9 X. |8 _" E9 }& @) [3 Z
//设置文件保存类型* l+ e6 n+ q: V! M
sf.Filter = "txt文件|*.txt|所有文件|*.*";& h) U: t# q* }+ \( s! {6 g! H5 s3 H
//如果用户没有输入扩展名,自动追加后缀
$ N% C( w& d3 @" d1 ?' s sf.AddExtension = true;+ O3 x1 T2 V. V) N, s2 r
//设置标题
6 Q2 O5 }" h/ p: } sf.Title = "写文件";2 i# H% r" }( a/ S
//如果用户点击了保存按钮0 b2 I" S" Q- Z% p
if (sf.ShowDialog() == DialogResult.OK)
/ I8 Y5 Z9 \- E0 Q9 d2 M {2 s* p, J8 \# @. u' Z( R- ]
//实例化一个文件流--->与写入文件相关联/ |& b2 c' Q/ S6 i
FileStream fs = new FileStream(sf.FileName, FileMode.Create);+ G! [0 _/ e5 }# ^/ s1 J5 c
//实例化一个StreamWriter-->与fs相关联% i& e6 H9 N& L0 V, r" e' l0 V* E3 z
StreamWriter sw = new StreamWriter(fs);9 u R) L. H9 ]! x( Q
//开始写入 B. x. D2 v, Y+ {/ Z5 c
sw.Write(this.textBox1.Text);
. G4 ]! V6 N3 n. i! ?1 F //清空缓冲区
$ L1 K! H2 k' i! [/ U Z" \ sw.Flush();
( O' b$ m4 R8 s7 A8 Y( } {- C) I //关闭流, N8 f( v* {+ s& K% M: e
sw.Close();
) W; ~' | f7 w- D$ h' ] fs.Close();9 _- l8 I* ]; Y4 t
}
' ]0 W. g' J$ o# b# @3 ~+ C8 L7 r+ Q8 B. F9 w! \
方式三:用BinaryWriter
$ |6 v) y |5 Y% |+ P0 X. O
2 x* i& m# M. ]3 }- H5 q//实例化一个保存文件对话框
2 c. U2 K" K( m3 u n5 K SaveFileDialog sf = new SaveFileDialog();
5 V" r: J: A* _' o/ P7 ? //设置文件保存类型+ W5 \1 `- |0 v& B
sf.Filter = "txt文件|*.txt|所有文件|*.*";) h8 s$ Y9 i% m+ Q
//如果用户没有输入扩展名,自动追加后缀
6 r% \6 C+ U+ u9 T" R+ X sf.AddExtension = true;8 N0 S) @/ O( f" D! Y7 L* \2 \, W
//设置标题% M. I4 W0 S1 n7 P7 |
sf.Title = "写文件";( t/ X. B: J- `% y, Z9 [2 x
//如果用户点击了保存按钮1 W. S- R3 a( @+ o
if (sf.ShowDialog() == DialogResult.OK). G" I. |' v+ }/ n. a
{- \% A9 [* T+ n$ V- o* k# B
//实例化一个文件流--->与写入文件相关联
8 {4 Y" @9 ?9 y! g& ? R FileStream fs = new FileStream(sf.FileName, FileMode.Create);8 U" u6 N+ B+ I- T P
//实例化BinaryWriter& C# g' H6 z# g }- r3 u4 w
BinaryWriter bw = new BinaryWriter(fs);
' z5 q3 W0 b$ q4 @ bw.Write(this.textBox1.Text);
" o7 @# X. \ Y, a' b8 C% O //清空缓冲区
+ U" @* ], b' L8 B& G bw.Flush();3 {8 e9 Y9 ]. P; x& @, ~+ Y0 @
//关闭流
& s& q% Q g3 V; z bw.Close();3 E. z" t, l8 D3 n' P; r; o
fs.Close();3 ` [+ S: `) S( K
}
3 w7 O( q3 y" Z8 J' l- }, ~# O, d- I4 p5 A8 g3 X) g8 y9 o$ W ^! u
C#缓存流示例------>用缓存流复制文件, l' U) f Y9 |; g; u
" l: X7 }! g0 B4 l* A, x7 P
C#文件处理操作必须先导入命名空间:using System.IO;& w( t! ^9 k# O
9 F: `- ?1 d) L
背景:使用VS2005、一个按钮、一个窗体、C#缓存流、把D:\KuGoo\爱得太多.wma复制到D:\并更名为love.wma,即:D:\love.wma* u! b6 s# u0 ^# L6 |& a1 u" j
5 X- Z% J' b4 j( U6 g) x
在按钮的Click事件中添加如下代码:$ L! e/ U6 P( K4 J3 C" e
+ L) q* R S6 }/ P* q+ L7 k) B( w; g
private void button1_Click(object sender, EventArgs e)
2 T& d: j/ ^8 S6 ?, R* J6 u! W {
4 [4 g2 a5 D8 X //创建两个文件流 一个是源文件相关,另一个是要写入的文件
' g0 c- j7 |% o+ G9 L }9 A& w FileStream fs = new FileStream(@"D:\KuGoo\爱得太多.wma",FileMode.Open);8 Z5 p7 ]. L) g5 n7 @
FileStream fs2 = new FileStream(@"D:\love.wma",FileMode.Create);
8 w$ ?, t/ `/ a# Q" Y9 l //创建一个字节数组,作为两者之间的媒介" r3 n$ A$ K9 r+ ~
//好比两个人拿苹果,这个字节数组就好比一个篮子,一个人作死的把苹果送到篮子里面,9 c5 c( j+ m p! j0 j( o& q
//而我就可以作死得拿苹果,通过这个媒介我们互不干扰,
7 s% ], I" B4 O //不需要互相等待【她往篮子里面放了苹果我才可以去拿】,提高了效率; [/ J( g7 a$ q! q9 Q, D
byte[] data = new byte[1024];5 |0 \! M, i# D! s" o1 L
//创建两个缓冲流,与两个文件流相关联
6 l" M, C' n; A6 Y. @( r' t- Q4 d7 v BufferedStream bs = new BufferedStream(fs);
4 k0 @3 b9 p4 M: D; H+ x' J BufferedStream bs2= new BufferedStream(fs2);1 A' _& B P D; Y3 p0 p
//fs作死的读,fs2作死的写,直到fs没有字节可读fs2就不写了 d+ y: a9 c3 s# @9 t
//好比,一个人作死的往篮子里面丢苹果,另一个人作死得往篮子里面拿苹果,直到篮子里面没有苹果拿了为止
; t% I+ }9 ~5 m2 `) x0 z) t //即-->那个人没有苹果往篮子里面放了) D: e; \4 Z6 V8 F) I
while(fs.Read(data,0,data.Length)>0)! r, N( n0 S. `6 P
{8 t: n& X7 u9 E2 q. U1 F
fs2.Write(data,0,data.Length);
- A% z" b( W6 u" i& s5 M$ E3 j fs2.Flush();
/ W( `- D# h4 u: i I `) v8 o$ A" ^ }1 ~9 Z6 b7 f: R) v5 Y4 m
//关闭流,好比两个人累了,都要休息 呵呵o(∩_∩)o...
& X r) S9 D0 F" o fs.Close();/ ^6 C. m+ ^* X
fs2.Close();2 i/ n6 ~6 C& e- C
}
7 |# o2 l7 s( t1 g0 p( C$ X- I% q0 g3 z2 C, l _
7 w0 U1 z$ a4 ?; W% ~6 o
C#内存流示例----->用内存流来读取图片' Z2 R7 c2 z+ ~: Y
C#文件处理操作必须先导入命名空间:using System.IO;9 j; z7 \% n/ K+ w6 P
( D) c q0 w# G背景:一个窗体、一个pictureBox、一个lable[没有选择图片,lable的text为"图片未选择"],在pictureBox1的Click事件中添加如下代码:& H) H$ a" n) ^3 O
2 h4 h N ~9 n% m
private void pictureBox1_Click(object sender, EventArgs e)
* [1 g% s. o) W( C: V {& u5 f! k2 V C/ }
//实例化一个打开文件对话框 b/ _* t$ j4 E4 l) Z
OpenFileDialog op = new OpenFileDialog();) w3 o3 }- U% R
//设置文件的类型
( W5 L; w J3 _; i, [* Q: S: Q' s op.Filter = "JPG图片|*.jpg|GIF图片|*.gif";8 }0 O5 Z* Y! ^% G7 \( ~
//如果用户点击了打开按钮、选择了正确的图片路径则进行如下操作:
8 _% |: U/ U: B8 f4 C if(op.ShowDialog()==DialogResult.OK)
5 e, | ]! U# T& h s+ P3 g1 P {
5 e+ W0 N( y8 D7 S* e+ k( Q //清空文本; P/ p1 h% |2 ]* w
this.label1.Text = "";+ c o4 z/ n- s( M2 [
//实例化一个文件流
* v) q* |7 P9 L0 V FileStream fs = new FileStream(op.FileName, FileMode.Open);) z, u$ V, k! L# M K1 d: Z7 A
//把文件读取到字节数组
' g P3 z; j3 r9 s8 o+ k+ e byte[] data = new byte[fs.Length];& x( o' j3 @4 Q- l2 D
fs.Read(data, 0, data.Length); r2 g/ S- Y& \" F/ _" S
fs.Close();2 U% T. B9 p: m. M) _1 ?
2 B* Y# A* A7 t; p1 a. Q
//实例化一个内存流--->把从文件流中读取的内容[字节数组]放到内存流中去
+ w8 k( f# T1 m6 n+ S; t MemoryStream ms = new MemoryStream(data);! H& M- N' N; T$ [) l
//设置图片框 pictureBox1中的图片6 Q6 E& I2 H# A1 N+ o* Q ?) U
this.pictureBox1.Image = Image.FromStream(ms);
) X) @' x+ z H# D' y# I4 x }. G. r" f: H; b4 i5 i
: l8 E/ F: e7 y/ {2 F& S" I3 n } |