c#写文件
6 M& V8 ]0 S+ l' O6 `& ]3 ?3 L9 Q; k' W% i
C#文件处理操作必须先导入命名空间:using System.IO; 9 l$ o% [! Y# M- z7 c6 j+ i
//实现背景:一个文本框、一个按钮、VS2005$ }0 c$ F. t2 {6 K# Y4 ^5 ]
! R, k* B( y( d* W& x
方式一:用FileStream7 H2 q# i9 V1 _ Y6 q9 ^2 ~( `. T
; [" b. V3 J3 p1 r//实例化一个保存文件对话框
8 J6 s/ a) |9 `' `- I SaveFileDialog sf = new SaveFileDialog();6 i6 b' C& J$ |/ [+ a
//设置文件保存类型! B# d' P, Q# J' o+ z( h. I' P
sf.Filter = "txt文件|*.txt|所有文件|*.*";
5 }& M! I, I; E" \6 N3 Z //如果用户没有输入扩展名,自动追加后缀
& C; Z( S3 f- l4 d/ _( ?( | sf.AddExtension = true;8 d! v1 J( d- R. {& _% ]/ N
//设置标题/ \# W f) V* V* {! l
sf.Title = "写文件";
# ]7 M! Y$ }) H //如果用户点击了保存按钮7 ?; I0 I' i8 A, r, F4 J6 {7 |. v
if(sf.ShowDialog()==DialogResult.OK)
/ d9 R, N3 S! w1 k {
Q& A0 Z2 p" o4 E //实例化一个文件流--->与写入文件相关联
) w. N8 [7 B! _ FileStream fs = new FileStream(sf.FileName,FileMode.Create); N1 l' X" e5 n9 Y
//获得字节数组; G0 j8 J) M9 m* D& J9 e! X0 D( E
byte [] data =new UTF8Encoding().GetBytes(this.textBox1.Text);0 w1 @" K4 ~5 T% X( E4 q+ Q" O) ^
//开始写入2 J, z' j' s' q% f: f: e1 F4 y9 K
fs.Write(data,0,data.Length);; ]' C' U. Q" {% X$ _1 L
//清空缓冲区、关闭流
+ K! R9 r3 H i0 K fs.Flush();+ l" U, f) t8 [- |2 a8 I
fs.Close();
6 x" f5 Q$ j! Q/ {( t# H2 Q' y! Y: V/ O; ^/ H. K9 k) ~
}+ h# O W" a2 S& R$ L( r
! d2 i1 v, @( }& y; z7 F, ~7 I. n方式二:用StreamWriter o* r: f6 d: f2 w
% I z5 A9 Z/ L# |/ u: x//实例化一个保存文件对话框
I4 L" P, C" S SaveFileDialog sf = new SaveFileDialog();! J) B( i3 ?- e* I: J$ ]& Y
//设置文件保存类型
5 J: Q; O# S0 g9 A9 T& w3 i3 ?" d; V sf.Filter = "txt文件|*.txt|所有文件|*.*";5 X& y0 c' Q8 X
//如果用户没有输入扩展名,自动追加后缀
4 f& [$ U1 d/ F9 p3 V2 M! o sf.AddExtension = true;- H f. Y2 q. g3 @: [6 C! Q
//设置标题
9 l$ [. T2 A# g# s: B sf.Title = "写文件";5 T: h' u& i5 `3 y _: v
//如果用户点击了保存按钮" I* F/ P# y7 C9 B% q1 U
if (sf.ShowDialog() == DialogResult.OK)) }9 G% h/ M) Q h6 v
{0 M- z/ C/ `' z1 J
//实例化一个文件流--->与写入文件相关联* I3 Z$ e+ u5 f# ~
FileStream fs = new FileStream(sf.FileName, FileMode.Create);
6 ]; ]: p A9 ~3 ` //实例化一个StreamWriter-->与fs相关联7 p! z1 G$ v; U) }- C/ T
StreamWriter sw = new StreamWriter(fs);
0 {. { M6 `7 [: Q0 g1 A; e3 x7 R //开始写入
: Q+ {! ~( U0 A( {. p- ] sw.Write(this.textBox1.Text);/ z& c ]1 D. U6 q# ~/ z
//清空缓冲区* ^0 W1 v" P) E6 P: B
sw.Flush();
- d4 _! ?; [8 y' P* b //关闭流, [; N& G, c4 x9 @
sw.Close();6 [! p' y [* Q- p% B0 y9 t* A
fs.Close();
' h) L& ]: [( B0 ?1 f, ~7 T- { }7 T5 S0 l* N& L8 l+ ~
+ H; v* v4 E2 [8 E
方式三:用BinaryWriter/ r _' {5 h! x/ q) ^- X
( S8 p( G$ ~4 w9 B- Q//实例化一个保存文件对话框# _" ]2 d8 m, S" g
SaveFileDialog sf = new SaveFileDialog();
$ S( L; a* D' Z: h9 [ //设置文件保存类型: i' B. J7 t, r9 i e
sf.Filter = "txt文件|*.txt|所有文件|*.*";
& ?' w! _1 |& J) k1 `/ { //如果用户没有输入扩展名,自动追加后缀2 e' \& d) j6 R: D
sf.AddExtension = true;0 }% l. T, H9 `9 E: w
//设置标题
# Y( x' Z; s' A; k, o# e sf.Title = "写文件";
- e$ W7 @7 X' C //如果用户点击了保存按钮
& R0 ~$ B9 T8 `. Y if (sf.ShowDialog() == DialogResult.OK)
, ?- ~# H- V2 U {: t; O9 ?' g, z% j
//实例化一个文件流--->与写入文件相关联8 }7 N4 p( H ~0 R* W1 t+ r
FileStream fs = new FileStream(sf.FileName, FileMode.Create);! _; X* P/ K- L4 L5 \/ ^- g
//实例化BinaryWriter
4 g1 |, u* x7 b BinaryWriter bw = new BinaryWriter(fs);
/ Q- _" ] S! `& B8 y bw.Write(this.textBox1.Text);
3 H+ g0 g) G* ^: r4 S0 j9 x //清空缓冲区9 y+ Z4 v, z m8 K
bw.Flush();- c: {& U9 n/ `, a
//关闭流6 }; h5 K) G$ {5 ]* Q& u
bw.Close();
6 l3 e8 r& P7 f H: {4 P fs.Close();
9 C; U" K. @3 V- O }# R* H9 C. n+ g4 [7 d9 Q8 K# R% o' W
& E5 ~. ?7 `+ H: W' S; _3 P* w
C#缓存流示例------>用缓存流复制文件
9 z. X& z9 I7 e" j( m5 \8 g1 B' y: x" A( o7 ~4 e( z
C#文件处理操作必须先导入命名空间:using System.IO;' o4 J- B. V1 u0 I
/ @$ g4 A/ W; V1 t a8 H m
背景:使用VS2005、一个按钮、一个窗体、C#缓存流、把D:\KuGoo\爱得太多.wma复制到D:\并更名为love.wma,即:D:\love.wma
! @, `" C4 D. g* |) S3 G; o5 x& r+ c5 S
在按钮的Click事件中添加如下代码:
/ `+ J& W0 R* N# Z. j2 n, f$ D1 \( g0 w4 a
private void button1_Click(object sender, EventArgs e)9 ?* D8 p0 K/ _* y( F7 f3 {
{
* s" N" p6 [9 r( r) t; ` //创建两个文件流 一个是源文件相关,另一个是要写入的文件6 Z w( G E. i/ k# u
FileStream fs = new FileStream(@"D:\KuGoo\爱得太多.wma",FileMode.Open);
5 t5 G' y7 @9 ~% ]( P FileStream fs2 = new FileStream(@"D:\love.wma",FileMode.Create);
+ G3 D0 ~. {( c. y' Q( w //创建一个字节数组,作为两者之间的媒介8 Y+ Z" V- L$ l; [; q; G
//好比两个人拿苹果,这个字节数组就好比一个篮子,一个人作死的把苹果送到篮子里面,- V& l# a9 X. {5 a% U3 b& p" S
//而我就可以作死得拿苹果,通过这个媒介我们互不干扰,! O2 ]7 g: @/ @7 g0 u8 Z; P
//不需要互相等待【她往篮子里面放了苹果我才可以去拿】,提高了效率
, q8 ^) K, m% w byte[] data = new byte[1024];* @( {4 n6 T. J7 N8 ~* T
//创建两个缓冲流,与两个文件流相关联+ V4 g# F+ N3 _6 D* T N
BufferedStream bs = new BufferedStream(fs);
$ t+ X, a7 @( r& K$ D BufferedStream bs2= new BufferedStream(fs2);; \8 Q4 C' s( w7 T# ^
//fs作死的读,fs2作死的写,直到fs没有字节可读fs2就不写了' ]4 q! g% A# i7 p, U
//好比,一个人作死的往篮子里面丢苹果,另一个人作死得往篮子里面拿苹果,直到篮子里面没有苹果拿了为止
2 g8 g' y$ ~6 D1 M, F //即-->那个人没有苹果往篮子里面放了- y0 [6 s) W0 m7 o) s2 G: j- l; b( X
while(fs.Read(data,0,data.Length)>0)
8 K" }7 l- ?3 l+ a3 s1 D {
; U6 d, u6 K) V! D& {# W, ? fs2.Write(data,0,data.Length);
$ Y9 j* E: \6 n: j8 u& C fs2.Flush();
, \7 C1 R; T- s- i }( U; `& t. V7 |$ V) z
//关闭流,好比两个人累了,都要休息 呵呵o(∩_∩)o...
& f# e# I T3 D7 D" x fs.Close();
% c+ h# Z3 Z& D# o# S fs2.Close();
3 a7 y9 Q4 M9 o2 ^ }
' s n2 j7 a3 I: D
8 Q3 r& K! e% }4 J8 J$ O- X" }2 m" G' l
C#内存流示例----->用内存流来读取图片2 m/ I7 v" E. J. ], j: S- b
C#文件处理操作必须先导入命名空间:using System.IO;4 T1 ?& R/ d: T* m0 f
& Q0 _/ H& j3 Y# C: L9 f背景:一个窗体、一个pictureBox、一个lable[没有选择图片,lable的text为"图片未选择"],在pictureBox1的Click事件中添加如下代码:
8 b/ _7 M' ?$ p6 ` |/ V: p' G0 g* r. C& d2 q
private void pictureBox1_Click(object sender, EventArgs e)
9 F; M: F; F7 Q/ m5 X# H, O0 A0 G {
: N7 D$ d3 D6 _0 ~) S2 j //实例化一个打开文件对话框
! [1 u. |# y# J! M" S" G OpenFileDialog op = new OpenFileDialog();, E- }" k* ?2 s6 ~0 d9 @& e
//设置文件的类型
+ Z( O3 T$ ^) ] op.Filter = "JPG图片|*.jpg|GIF图片|*.gif";
r4 q4 {1 k2 t) E //如果用户点击了打开按钮、选择了正确的图片路径则进行如下操作:
3 L, v8 F; J/ Z+ D if(op.ShowDialog()==DialogResult.OK)
6 q* N- u) F2 E. }9 P1 N {4 ^* ?" q3 {+ v+ q8 z
//清空文本
( w/ o( a4 {4 k( S% `* w this.label1.Text = "";
; T& D! j7 k, }# G+ v/ C //实例化一个文件流
; z w" C! G1 k, W( d3 E FileStream fs = new FileStream(op.FileName, FileMode.Open);* T, p* w6 S W U' J2 g
//把文件读取到字节数组
* V/ t* d9 k$ s; r0 O$ w2 a8 B& V byte[] data = new byte[fs.Length];+ |+ w% n) d2 d
fs.Read(data, 0, data.Length);0 t& S6 k1 d7 c2 s- h1 K: q6 G' o
fs.Close();
1 w' o; X4 u% [" H8 w" y. z6 {* d" p" b/ W) t0 b; x) k
//实例化一个内存流--->把从文件流中读取的内容[字节数组]放到内存流中去
! r$ V+ A8 p! _; U MemoryStream ms = new MemoryStream(data);
/ v; c( Y% o' t% r! M* V. K+ A //设置图片框 pictureBox1中的图片9 k) C0 C8 l7 G3 f
this.pictureBox1.Image = Image.FromStream(ms);1 t/ G, }; V- T' Z! \' } o( Q
}
, O; {% ?, e! e! K% {4 ]# W0 M% r. ^3 M6 @2 }# A4 x, U
} |