c#写文件
) k9 t, `2 \$ C: n( r) S }# S( V, @/ _
C#文件处理操作必须先导入命名空间:using System.IO; 7 _2 V: H0 |) V# Y6 h4 P# D8 e
//实现背景:一个文本框、一个按钮、VS2005. E5 L8 u! T4 P/ G( H& |& Q; s
7 o9 ~9 p+ q1 N# B" X方式一:用FileStream
! ?% n$ W8 [: p; G$ {' I2 B* I
& L: h3 e& A7 p* g//实例化一个保存文件对话框
# ?; g/ K7 R; J9 k' ^. p3 Z SaveFileDialog sf = new SaveFileDialog();
( w* ~; }1 j6 p8 J2 S ~: } //设置文件保存类型. k) n+ A. C5 D6 _/ S! l6 k
sf.Filter = "txt文件|*.txt|所有文件|*.*";2 K4 k2 k! P' T9 D$ ]0 E
//如果用户没有输入扩展名,自动追加后缀
1 b! p$ U3 H# v1 \- B' c/ ^) f) w sf.AddExtension = true;
0 }8 ?" K# B: p2 E4 z3 } //设置标题( S% y8 c) X; }; O
sf.Title = "写文件";
! X2 Q2 D6 C$ c, i. X a //如果用户点击了保存按钮
1 C9 F/ W, D: [& y8 ]- ~ if(sf.ShowDialog()==DialogResult.OK)
5 B1 E# X$ L: C8 t( l9 t3 B {
3 W& h3 h- `/ O- k4 q //实例化一个文件流--->与写入文件相关联
4 F8 }) h& V1 V- ^7 _7 o& m FileStream fs = new FileStream(sf.FileName,FileMode.Create);
1 p Z1 u2 b( \ //获得字节数组4 k6 u) ~+ G' A1 o! U! H1 q
byte [] data =new UTF8Encoding().GetBytes(this.textBox1.Text);0 n# |) a+ E x6 ]( j
//开始写入
9 P/ B2 U8 O- K fs.Write(data,0,data.Length);
7 ]/ D% i9 s* d% H K" S f. @ //清空缓冲区、关闭流' G' ~- `3 F. m" |: @& [, ~! l1 O: v
fs.Flush();8 |: K) S2 v% g* O
fs.Close();2 V5 u$ Y4 e! g9 h* `
' D* t. M& L; f. y. d+ U0 k3 S" d
}
: T3 l$ P% g0 V2 V+ o ]1 k% I, Z. v3 ~; t) G
方式二:用StreamWriter: L N& A' R3 |' k- e. n+ l
" D6 K: `! L+ d R) l3 Z3 j, L
//实例化一个保存文件对话框
0 s8 Y O& P. a: q, h1 ` SaveFileDialog sf = new SaveFileDialog();
$ N0 x1 p# E( e3 a& ?0 T //设置文件保存类型
. H- t. s$ A% z1 m( z- Y& W sf.Filter = "txt文件|*.txt|所有文件|*.*";
4 s: c/ ]- |% M# c/ E1 m //如果用户没有输入扩展名,自动追加后缀5 d' c+ [ F! K; p2 _' \) u$ i3 T
sf.AddExtension = true;- L7 z9 R! V* Q: V1 ^
//设置标题
1 b4 S0 {, `* Z1 ?. n sf.Title = "写文件";4 j. {2 t' L+ w6 y7 U" C. n3 L
//如果用户点击了保存按钮
: Q' b6 q. Z) a0 h if (sf.ShowDialog() == DialogResult.OK). V {8 l1 N; x: I+ c Q+ Y/ A# R
{
/ H+ c3 J8 _5 Z+ n8 @ //实例化一个文件流--->与写入文件相关联
: m: \% u; l, | FileStream fs = new FileStream(sf.FileName, FileMode.Create);) ?$ P0 S- R0 z% h" l
//实例化一个StreamWriter-->与fs相关联$ ]1 ^2 {. F+ N/ z2 D- E4 A9 L5 n
StreamWriter sw = new StreamWriter(fs);6 h3 Z5 }7 Q+ r( w5 r; Z0 d% g
//开始写入
" `; A8 N7 k! f/ W5 P: U. k sw.Write(this.textBox1.Text);% g9 c _8 g7 N( ~) q3 a0 N
//清空缓冲区
& I% ?" E2 E, O+ p sw.Flush();
0 }6 W4 |8 `$ \1 W. H //关闭流
! u1 F. u3 h" X5 R! f6 w9 Y sw.Close();( u* Z9 u! q( m
fs.Close();" M z; ]$ w+ g$ l. J: b. t
}* N8 C& v" @ a/ ^' k$ _
5 P6 r& E% X% d: ^& @方式三:用BinaryWriter
% ^) Q6 M$ J5 F9 K. j3 G
7 Y6 x& A1 `7 M/ b' u {( h* V//实例化一个保存文件对话框
4 [0 R6 ~1 G6 k5 c5 w6 i SaveFileDialog sf = new SaveFileDialog();: N- u8 D1 S3 d. ?' j$ H
//设置文件保存类型
, n8 X% Z) x% J: V/ f0 F* A- e sf.Filter = "txt文件|*.txt|所有文件|*.*";
3 a" L R" N, @& n( i- M& ^ //如果用户没有输入扩展名,自动追加后缀
- Q' w V7 W7 x+ x" \ sf.AddExtension = true;8 h6 _* ~# Z: q& M: [4 M# t
//设置标题8 s- a/ Z4 t# D9 Y7 {/ T* f
sf.Title = "写文件";0 J# S( r8 ]2 Q3 X
//如果用户点击了保存按钮- ~+ U$ {5 t) o9 ]# b9 l: O
if (sf.ShowDialog() == DialogResult.OK)* V3 y( Q4 ?4 \, n. ~
{
/ x7 ~8 Q! J: H9 w //实例化一个文件流--->与写入文件相关联! n4 w4 t) k7 D; t/ P l$ f
FileStream fs = new FileStream(sf.FileName, FileMode.Create);2 Z8 C# [( _' k4 K: ]3 h
//实例化BinaryWriter3 r. S% y, n5 w. H) i
BinaryWriter bw = new BinaryWriter(fs);* P; ^! u8 x7 [2 x' f& F3 p
bw.Write(this.textBox1.Text);3 @. }- x1 o1 F7 J% X" o
//清空缓冲区
" {+ {0 s0 r; r/ N% g bw.Flush();7 f% U, S) @2 {+ ?2 D' I! C
//关闭流) s. b( r2 t* X0 Q
bw.Close();
3 | d# t Y: O9 z# ^# n( a7 i fs.Close();9 [) J+ Q( c7 V, b- A+ x
}
% z6 _7 ^3 g/ ?+ P
. P1 k, s) K$ M( g" mC#缓存流示例------>用缓存流复制文件( m: m1 ^8 ]8 [) h2 r$ T* v9 a
6 P+ s! l1 w2 F+ J3 kC#文件处理操作必须先导入命名空间:using System.IO;4 t, o, K6 U1 a, E
5 c' u; |5 [4 I. g* n' |& B
背景:使用VS2005、一个按钮、一个窗体、C#缓存流、把D:\KuGoo\爱得太多.wma复制到D:\并更名为love.wma,即:D:\love.wma
9 u3 o/ Y6 _8 c% x$ ?+ h5 M+ }2 x
; _$ p7 b9 [' G& c0 O& P4 N8 V在按钮的Click事件中添加如下代码:
, D8 T1 c/ V$ r J
i# Q0 H8 p- q2 z" H: Y4 Z' W5 Hprivate void button1_Click(object sender, EventArgs e)1 O7 X0 }% ?. |8 v2 D) M
{
6 X/ [8 `0 H$ B4 p+ z9 j' S //创建两个文件流 一个是源文件相关,另一个是要写入的文件
' \# X: T4 W5 t# _; m. I7 o1 V FileStream fs = new FileStream(@"D:\KuGoo\爱得太多.wma",FileMode.Open);2 t: r E/ W! }4 s _/ Y, ^
FileStream fs2 = new FileStream(@"D:\love.wma",FileMode.Create);! d0 B9 z7 }; v' T
//创建一个字节数组,作为两者之间的媒介+ A# {5 v/ b i7 P3 v1 K7 h
//好比两个人拿苹果,这个字节数组就好比一个篮子,一个人作死的把苹果送到篮子里面,
" T0 Q2 I# i( m# P0 U$ u //而我就可以作死得拿苹果,通过这个媒介我们互不干扰,: c9 B) S0 @' Z, V) t5 ~ \
//不需要互相等待【她往篮子里面放了苹果我才可以去拿】,提高了效率
- P# \7 D6 X9 ^4 b. O+ ] byte[] data = new byte[1024];5 m. \$ N3 \/ m% i* g& o
//创建两个缓冲流,与两个文件流相关联
8 j, A7 e$ x; \. g' o0 N BufferedStream bs = new BufferedStream(fs);
8 b5 ?6 Y2 |- W) j BufferedStream bs2= new BufferedStream(fs2);: j5 y$ X& m; ^4 a; B+ F
//fs作死的读,fs2作死的写,直到fs没有字节可读fs2就不写了
" \+ b; \+ \9 G: `& P# N. [9 c0 I* q //好比,一个人作死的往篮子里面丢苹果,另一个人作死得往篮子里面拿苹果,直到篮子里面没有苹果拿了为止
+ v2 e1 ?" W$ W8 B6 u; X //即-->那个人没有苹果往篮子里面放了. M- Y2 N$ e7 |, S
while(fs.Read(data,0,data.Length)>0)
4 K- W3 l' E& \3 f% @0 q' G. d F { X5 C! V9 x/ a7 o+ ]4 w' `/ I
fs2.Write(data,0,data.Length);4 Q. C2 a5 }% p* ?6 o
fs2.Flush();
6 m. D2 D& e! ?2 c0 U1 s8 {+ H }
3 l* u' J: m5 L# B \6 x# t //关闭流,好比两个人累了,都要休息 呵呵o(∩_∩)o...4 {* U8 k) J! r4 [$ d* r" [- n9 J. W
fs.Close();
7 f* ?5 }! V# B fs2.Close();* G# S8 L9 [9 u' _; g& H8 B3 _
}# N/ o1 k: S4 R6 ~4 Z, u5 o6 ]
6 N( D8 H/ j% [% M! {: ?$ j1 L
1 s5 f5 ~( ^7 P$ j/ U$ W$ |7 e
C#内存流示例----->用内存流来读取图片7 P0 I. D! v+ k$ B- ^' F
C#文件处理操作必须先导入命名空间:using System.IO;" q' w9 d/ L# ] \
+ Y; }: U8 w' H+ |8 Z& b# T
背景:一个窗体、一个pictureBox、一个lable[没有选择图片,lable的text为"图片未选择"],在pictureBox1的Click事件中添加如下代码:) D0 J! y6 C9 R* E, Q' s1 _
" y5 v6 M- Q- C! c1 y, T6 y
private void pictureBox1_Click(object sender, EventArgs e)4 A+ m3 s4 @7 @, d0 Q
{
* {+ `+ g" @$ A3 P5 X //实例化一个打开文件对话框* N5 G) l& o1 n7 O7 {9 `7 l
OpenFileDialog op = new OpenFileDialog();4 u0 n1 V ^- }$ r4 o
//设置文件的类型
3 J. | r4 a( w4 Q op.Filter = "JPG图片|*.jpg|GIF图片|*.gif";- t( f6 d! Z' c* Y, x# v8 A9 @
//如果用户点击了打开按钮、选择了正确的图片路径则进行如下操作:% G' E$ X% E! I$ s2 r0 S
if(op.ShowDialog()==DialogResult.OK)
( H; H y1 R; l% W {) v3 Z8 s4 T7 E, D/ n! Z9 v4 E
//清空文本
% [! z- q! p) m# B this.label1.Text = "";% S$ {6 _- m* A0 i3 K# \
//实例化一个文件流
, G, B9 [- g. ^5 j$ S' e' `7 [# o FileStream fs = new FileStream(op.FileName, FileMode.Open);/ }# b$ y6 t; g3 o& `% U! m
//把文件读取到字节数组+ P8 z3 Y) I5 Y" W6 f* z+ ?
byte[] data = new byte[fs.Length];
$ h. |, x5 e' r h3 G fs.Read(data, 0, data.Length);
6 o9 k# W4 @/ O) Q fs.Close();/ ]4 p! ]# M0 c, X' Y: q" I
8 V) _# p4 G% P3 d1 d4 @! A0 c
//实例化一个内存流--->把从文件流中读取的内容[字节数组]放到内存流中去4 N2 W4 E7 s8 T6 \7 x6 n" b$ v5 `
MemoryStream ms = new MemoryStream(data);! |( d# d( p: w1 l
//设置图片框 pictureBox1中的图片
8 S( k5 O- D1 V8 i5 e this.pictureBox1.Image = Image.FromStream(ms);, \0 X1 }2 h/ A! e
}% Q* W4 g8 I# `9 T8 M! o7 Z
_. t( W9 M; }. w: [
} |