c#写文件
" _% t3 x2 o$ K9 Z8 @3 Z1 ]( e; K( x, c' j; ~
C#文件处理操作必须先导入命名空间:using System.IO; # R# C( s& H4 I
//实现背景:一个文本框、一个按钮、VS2005
8 e5 \ p& b( |& p: t% I9 {) O6 }& Z6 u8 d! ~
方式一:用FileStream
) C9 }8 \' V, z4 V
" W4 v/ @8 V6 a5 Z3 @ z i//实例化一个保存文件对话框. q: T; J; X0 A. ^
SaveFileDialog sf = new SaveFileDialog();
- I# ~8 ?) C* [; p: F //设置文件保存类型
) K$ Y/ N# ~5 i* W0 I sf.Filter = "txt文件|*.txt|所有文件|*.*";
" j2 M3 r6 M Y9 I* Q //如果用户没有输入扩展名,自动追加后缀
( N ]. _" ^3 O# p' h0 M sf.AddExtension = true;
" ?0 Y1 w! ^# z0 N# o //设置标题
1 P/ b+ v% ?8 h3 D: Y+ x1 o sf.Title = "写文件";5 b) J. z l6 i2 J7 ]6 [/ b
//如果用户点击了保存按钮
o% K) j+ R% ?. {1 ~; I4 P if(sf.ShowDialog()==DialogResult.OK)
+ J4 p( v: M6 { m0 M% d s {
3 k1 W( w, N& B7 ] //实例化一个文件流--->与写入文件相关联* E- ^; ^: Y5 _) Q' ?
FileStream fs = new FileStream(sf.FileName,FileMode.Create);. t/ L& m# t+ q5 o, x
//获得字节数组
0 M7 a% O/ a/ X! z4 p) C byte [] data =new UTF8Encoding().GetBytes(this.textBox1.Text);1 `; ^" t% Z; I( v0 {" C
//开始写入( y- _: Y/ [9 U& D5 D3 O. t
fs.Write(data,0,data.Length);/ C3 n, B9 X9 W3 B: e
//清空缓冲区、关闭流
& C" f- `) S* L6 @& n( S fs.Flush();
, X/ ]% ?- r$ y1 ? fs.Close();/ x4 T6 l% A4 i, ^! A" e& T% w! T
( B( }# {, q5 F# d8 ?7 D }
' j& `% z7 @" a( ~; ^+ {2 R. G0 k2 v. V" u
方式二:用StreamWriter
+ `% V' X; ^6 r& z: l
+ R) ^( s F9 }9 g' z' d5 r7 t: Q//实例化一个保存文件对话框
; p2 g) l0 G% x+ w, x2 C% S6 z& ^* C SaveFileDialog sf = new SaveFileDialog();3 H I1 r! o c+ U' U0 ^/ H
//设置文件保存类型
1 i8 T0 o& q5 `; J0 R5 @. M sf.Filter = "txt文件|*.txt|所有文件|*.*";& S* b5 [" J5 G- u+ ~: T C+ _
//如果用户没有输入扩展名,自动追加后缀+ m( u: F) S) V- `$ F- W! \
sf.AddExtension = true;
8 {; O% A: N% S- s8 x/ F$ p8 p. T //设置标题# m4 H* B9 x1 `- P+ k3 C; {3 ^
sf.Title = "写文件";
1 q$ [- Y# c; [/ w/ Y7 o' k //如果用户点击了保存按钮
5 j( |' q- R$ b( D5 V5 k/ u! L4 y if (sf.ShowDialog() == DialogResult.OK)4 V" m2 W. ?( E; D# L
{8 D) x: `7 u- |# c. P
//实例化一个文件流--->与写入文件相关联0 n' f- _. d2 q* Z) w7 `4 v& L
FileStream fs = new FileStream(sf.FileName, FileMode.Create);
1 l, o, T8 `! J6 |- q //实例化一个StreamWriter-->与fs相关联5 @2 V1 W* G/ O; T3 |) z
StreamWriter sw = new StreamWriter(fs);, Y" k9 c! g8 o9 d0 s2 r* b1 q+ ]8 ]
//开始写入
" j/ d: B5 ?7 E; Q sw.Write(this.textBox1.Text);
% ~0 r3 W1 E/ ^, h% c //清空缓冲区
7 ?6 {* H; W5 \ C8 v$ X sw.Flush();, ~; B D, Q) @
//关闭流
1 N/ @: `: k: i p; I sw.Close();2 T; D5 F7 m0 l8 I5 i+ n% o
fs.Close();9 j( w, u" X, w7 Y$ C/ L
}; s+ T& T2 m" s7 C
! X7 ~. l7 P7 o" `" x方式三:用BinaryWriter
' h& R" @# ^( A' N
3 E, J; o( K4 @, Y3 e8 o//实例化一个保存文件对话框
. ]/ h4 k( s1 x! c. | SaveFileDialog sf = new SaveFileDialog();
6 D6 H+ r& ]. M: w+ O2 I, |( Z R' F) | //设置文件保存类型6 P) B& }: T/ _# ~7 F) E* r
sf.Filter = "txt文件|*.txt|所有文件|*.*";: s* }+ ]6 K0 s# i
//如果用户没有输入扩展名,自动追加后缀
9 N/ `# D; Z0 J+ n sf.AddExtension = true;
* E* t) P$ ]8 _7 {$ l //设置标题" t# K0 p/ r! |% ]. z* r
sf.Title = "写文件";
: X$ Y, V2 v2 P3 s5 q: ?2 V) T //如果用户点击了保存按钮
& k- Q5 l- i6 `9 ]9 s) C1 b! q if (sf.ShowDialog() == DialogResult.OK)/ S- i0 B3 B4 c& v' f
{2 X8 d/ j" T, x$ X
//实例化一个文件流--->与写入文件相关联1 i' z/ {0 a! v- T2 x) h) [
FileStream fs = new FileStream(sf.FileName, FileMode.Create);
1 Z" s% P1 j+ N( B+ a8 D //实例化BinaryWriter3 u1 z& u! e7 v/ V6 A$ }4 i" J
BinaryWriter bw = new BinaryWriter(fs);
6 ]3 Y1 M3 \# C1 l! j1 r0 D bw.Write(this.textBox1.Text);
! ]7 U( r+ X, a. Z2 p3 J9 j* _1 e //清空缓冲区# H% k6 z' e9 |, D# I, r# r
bw.Flush();0 D6 ^, Z8 ]. r
//关闭流# v1 w. @6 p/ A; {5 \
bw.Close();
& r( U/ z& q4 K3 P- m. J fs.Close();, l( O+ l0 ~3 g- U: I& ^
}
- S. k% z- f" \
" Y* e7 ^3 h* A- h! lC#缓存流示例------>用缓存流复制文件$ s5 c4 T1 t' B' |. G
8 T& D* w* J! r$ P) N3 U0 K. gC#文件处理操作必须先导入命名空间:using System.IO;
4 d7 e4 F1 S0 y2 O
( Z' y" k9 t) H3 ~背景:使用VS2005、一个按钮、一个窗体、C#缓存流、把D:\KuGoo\爱得太多.wma复制到D:\并更名为love.wma,即:D:\love.wma
/ D9 R/ v; Z# z# l* m6 q/ \0 \: I2 S/ ~: L5 Z" E* p
在按钮的Click事件中添加如下代码:
- Y I) X- R- h6 `/ ^4 w
% a$ x6 ~4 A2 E+ E5 V3 f2 b; ]8 bprivate void button1_Click(object sender, EventArgs e)
( E: }$ L! s& k2 q$ { {
4 j' T2 v T0 h* ^/ C& A. M2 l //创建两个文件流 一个是源文件相关,另一个是要写入的文件7 O2 b! o8 g- _% C% X& Q& q
FileStream fs = new FileStream(@"D:\KuGoo\爱得太多.wma",FileMode.Open);
; {, N- M/ `: u. v4 J8 y2 x FileStream fs2 = new FileStream(@"D:\love.wma",FileMode.Create);7 ]; O! v+ n$ `. _
//创建一个字节数组,作为两者之间的媒介- \* m$ t( _, R6 j8 r
//好比两个人拿苹果,这个字节数组就好比一个篮子,一个人作死的把苹果送到篮子里面,
5 H4 @1 O8 _. o9 H" q$ i2 |* x //而我就可以作死得拿苹果,通过这个媒介我们互不干扰,
& F! F5 x9 }& r* t6 y z2 `( I& g //不需要互相等待【她往篮子里面放了苹果我才可以去拿】,提高了效率
0 |$ p* p/ ^8 a o* O- C, U byte[] data = new byte[1024];
8 s5 D% S( ]- x //创建两个缓冲流,与两个文件流相关联
5 @ I& }+ e% K' ~ BufferedStream bs = new BufferedStream(fs);5 V/ K, M) c1 H& j& n! M
BufferedStream bs2= new BufferedStream(fs2);0 \! w& G/ C5 d: v# o9 w: @" E
//fs作死的读,fs2作死的写,直到fs没有字节可读fs2就不写了( p7 V2 u$ j' u _- S" ~2 y5 b/ z) W
//好比,一个人作死的往篮子里面丢苹果,另一个人作死得往篮子里面拿苹果,直到篮子里面没有苹果拿了为止
% k. ]9 v' g* X0 t; X$ o5 H% j9 W //即-->那个人没有苹果往篮子里面放了. l9 |8 N# T+ S! `* ~
while(fs.Read(data,0,data.Length)>0)& V( u, v: s2 P$ r0 u$ J/ ?, A+ p, l
{
/ }5 a% ^# b6 w; L" c fs2.Write(data,0,data.Length);+ U5 y3 N5 X' @7 r2 S3 S7 }/ \
fs2.Flush();6 M% K& |2 X6 ~# c1 \
}; A2 s H7 F6 b0 E1 U& n
//关闭流,好比两个人累了,都要休息 呵呵o(∩_∩)o...
) u, I. g: n/ p1 Z/ f9 A, u fs.Close();
0 G+ k# i5 W& }5 K, `8 D5 v1 Y fs2.Close();* |; e. w8 @% V3 m% o7 r! |8 i0 ] b& _
}5 D' ~, C- I' ?5 w9 R0 Z
4 U& }& I B9 l$ W w& n$ B% y- @. S
6 Q" ~2 U- i! b1 W" z% fC#内存流示例----->用内存流来读取图片
; g7 _# ^: B1 S" W3 n' E, z2 fC#文件处理操作必须先导入命名空间:using System.IO;
0 ~. `' t! \" } Z2 K
/ w+ L/ `: t( P+ s" i: F6 T% @$ ]) t8 M背景:一个窗体、一个pictureBox、一个lable[没有选择图片,lable的text为"图片未选择"],在pictureBox1的Click事件中添加如下代码:9 ]' b8 V" Q4 u& g& ?: y( i* W/ }
$ y! W/ ^- d1 |, U# s% W; c* Kprivate void pictureBox1_Click(object sender, EventArgs e)% y, k* A& L- x. N0 t" P( X+ H, j
{+ Y# s g6 Y4 ]' _
//实例化一个打开文件对话框
& h2 X6 C' O: ^9 V2 b! M OpenFileDialog op = new OpenFileDialog();
! \7 f4 t6 d2 ? //设置文件的类型
# D- c8 b- B7 Q- W op.Filter = "JPG图片|*.jpg|GIF图片|*.gif";" W8 ^8 a& p7 I; O1 N& [1 z
//如果用户点击了打开按钮、选择了正确的图片路径则进行如下操作:8 w2 J% v6 }0 G5 w) S
if(op.ShowDialog()==DialogResult.OK)5 ~9 |0 K/ d- \$ E
{( {) Y: q7 a& u: H8 o5 X+ v' O8 H
//清空文本
# p8 |6 r1 n& @* {$ P/ |5 p P: W. x this.label1.Text = "";. C2 J+ ^1 ?& ^$ {+ f/ p
//实例化一个文件流8 a8 ?+ P0 c4 H5 S; n1 \
FileStream fs = new FileStream(op.FileName, FileMode.Open);, s2 I f: {# f
//把文件读取到字节数组
; x0 A' K1 R/ \, g! V byte[] data = new byte[fs.Length];/ t4 s! n0 Y. o! ~2 _
fs.Read(data, 0, data.Length);
3 w3 R2 _: W8 g4 b/ U fs.Close();/ [+ q: j5 T' F; W7 u
7 J _: q6 X+ S$ a: J, o v //实例化一个内存流--->把从文件流中读取的内容[字节数组]放到内存流中去
! ?& v$ |2 T4 Y) N" y MemoryStream ms = new MemoryStream(data);
: B! s7 S% S4 V: V //设置图片框 pictureBox1中的图片4 p$ J9 t/ l M( x$ p3 e
this.pictureBox1.Image = Image.FromStream(ms);
% h1 L" w/ [0 ] }4 z4 D$ @9 t* r9 \/ {, z% N
+ u/ _2 d8 |4 @, \) d } |