c#写文件8 x7 }: @+ B, F! n
3 X- Q6 `/ X2 Q& x% C3 `C#文件处理操作必须先导入命名空间:using System.IO;
. q7 O4 }' q. e. t//实现背景:一个文本框、一个按钮、VS2005
* [1 R# X) k) u" `5 `
9 ^& }8 I& P. A6 i方式一:用FileStream
& ^ P J: }& _! T0 }
4 d1 h, o9 V& I//实例化一个保存文件对话框+ k1 x6 Y `) k: Z! L' N
SaveFileDialog sf = new SaveFileDialog();+ n4 P" k" S9 n9 ~3 B4 i3 @) @
//设置文件保存类型/ S2 O5 o. c9 c3 b+ O+ B
sf.Filter = "txt文件|*.txt|所有文件|*.*";
" f8 q. ~* [7 c+ q5 n, w //如果用户没有输入扩展名,自动追加后缀2 {$ y; @6 A1 o8 u, O! q/ L/ i) O7 p
sf.AddExtension = true;3 o# }" |4 G8 h" V7 ^
//设置标题8 @( f2 f3 S# H2 P6 U# x0 v
sf.Title = "写文件";
5 J$ i5 b2 T4 t; G" w6 [+ x' k* Z' ? //如果用户点击了保存按钮
3 n. U% F' E) ^- a: A3 G8 c4 p if(sf.ShowDialog()==DialogResult.OK)
* g& J& h; l; R* j4 v2 a2 C {
. l0 Z8 t: C6 v4 @( U8 d& K //实例化一个文件流--->与写入文件相关联
' o' {+ }& \3 L* Q FileStream fs = new FileStream(sf.FileName,FileMode.Create);
. W9 q$ w) t: V //获得字节数组. n+ \$ g" _4 Z& g# j0 f3 {: V8 N V
byte [] data =new UTF8Encoding().GetBytes(this.textBox1.Text);, @- L! i/ S6 x" `6 `" R9 v3 {1 T: K
//开始写入
2 O* ]1 G; Y$ U8 i: f+ u# O/ q! U fs.Write(data,0,data.Length);
0 l5 h1 l3 A& m //清空缓冲区、关闭流
) \: o4 t& n! \$ g; u fs.Flush();1 {2 U Z! K$ w' R. U3 j" @* ^: D& i
fs.Close();
5 F+ U4 v6 T4 z. X( b4 B* x: W( n" z, k3 u! ~) Z i S: L
}1 T, v7 E" J% y0 z- G
3 Q- F: T e9 U方式二:用StreamWriter) {9 a' L& ]$ _+ e
5 [$ f4 ^' E" a8 P
//实例化一个保存文件对话框
' ^9 i* H. s% t' X4 ~+ O% D SaveFileDialog sf = new SaveFileDialog();9 i; k9 w; {3 N$ t, T
//设置文件保存类型- v/ b: e# H& N5 ~
sf.Filter = "txt文件|*.txt|所有文件|*.*";
+ {/ z R/ m+ k+ g //如果用户没有输入扩展名,自动追加后缀, p7 T/ [0 I0 T. v% }0 a8 v
sf.AddExtension = true;9 J+ V0 h- t% s; O
//设置标题$ r: y! A, S; t' s- i& ]6 e% |; j
sf.Title = "写文件";
8 j) L h) a9 U //如果用户点击了保存按钮
5 y; h g* v7 T2 ? if (sf.ShowDialog() == DialogResult.OK)
3 C: b8 M2 ]% C4 Y, X! j& u7 ] {% t% m$ R& m3 D1 E7 c% i* r
//实例化一个文件流--->与写入文件相关联( }8 V) | g* { p) c
FileStream fs = new FileStream(sf.FileName, FileMode.Create);
& c* ~$ s3 Z6 e W2 L( u //实例化一个StreamWriter-->与fs相关联2 Y! {3 t6 P7 @! ]& U- A, S
StreamWriter sw = new StreamWriter(fs);6 l. Z6 Z& p6 r2 t" e
//开始写入
; k2 }1 U7 N2 u1 h, p$ { sw.Write(this.textBox1.Text);
8 p2 {$ e5 L8 n3 @4 {7 H3 y //清空缓冲区/ s- i5 k0 e- U& J
sw.Flush();/ k7 `6 s0 r$ z" @5 S8 x- E% h' d+ E
//关闭流
. a" }0 o; R% [4 {9 b% Y L sw.Close();
, B, v/ E, i# V* _& u& \ fs.Close();0 B* o+ y( P' {4 u& s7 m0 j6 V: Y# F
}
- w/ R' |4 k V$ U0 N, }0 W% g4 O$ v/ u
方式三:用BinaryWriter
$ G" l; M# A! L0 x* S, q7 E; C6 q8 e9 g: N
//实例化一个保存文件对话框) I+ r' u& B3 Y) z: S2 H
SaveFileDialog sf = new SaveFileDialog();* ?$ Q, V% A, y D5 d( F# I9 ~
//设置文件保存类型& a1 C3 j# I0 [) j
sf.Filter = "txt文件|*.txt|所有文件|*.*";
) c- Z0 Q; {2 i6 g. _. x8 J //如果用户没有输入扩展名,自动追加后缀
+ n: h1 `6 {4 ?* F sf.AddExtension = true;
1 X# k6 l0 E) X' w( m# Y //设置标题. X1 L$ ^8 S& D) |7 ?1 S8 \
sf.Title = "写文件";! d! X* [$ D \7 X9 H# \$ Z4 S
//如果用户点击了保存按钮1 t: ?4 C& o0 U, P% o
if (sf.ShowDialog() == DialogResult.OK)) n8 d6 E; h/ n' l9 s, Z4 }1 I* \4 P
{
8 w% p9 P2 c( F U //实例化一个文件流--->与写入文件相关联# ^8 c* n+ M) Q6 i& n/ [
FileStream fs = new FileStream(sf.FileName, FileMode.Create);- q; B% u& \$ B8 J k! Z5 J; w
//实例化BinaryWriter2 `9 ]# G1 y' t; r3 G& J% A
BinaryWriter bw = new BinaryWriter(fs);
2 y5 K4 F+ K) T& N; ` bw.Write(this.textBox1.Text);0 a: s* [- ^+ b: E& k
//清空缓冲区
; ^9 W+ v" L/ f, I* a+ {; [0 ]' F bw.Flush();
7 i p1 P, g# c2 R. g% n {' x$ f //关闭流
* k. d5 z) z) C bw.Close();. a# m0 A0 b9 k3 h8 K0 D
fs.Close();
! r& ?4 r& p0 a% e }+ _4 V% ]& G. b! u9 h7 ]# F
: H/ }1 @( q& h! O+ z, s+ D
C#缓存流示例------>用缓存流复制文件7 l1 c& D( J. D2 t1 U1 G! u1 U+ Y! I
2 H6 [% c9 p! `# DC#文件处理操作必须先导入命名空间:using System.IO;
2 M8 c7 g" A* S1 L0 c
, m# V+ `% e) I3 _背景:使用VS2005、一个按钮、一个窗体、C#缓存流、把D:\KuGoo\爱得太多.wma复制到D:\并更名为love.wma,即:D:\love.wma
; M0 ~0 i" t) x5 y% N; E& N8 Q8 B; D! a( z7 q
在按钮的Click事件中添加如下代码:
% c( R6 D4 z) M; w
: c' c' f. I' t0 Oprivate void button1_Click(object sender, EventArgs e)
# @" N& j" K( ]# Z9 G {! K' }; L" N% v" s; d' I5 b. \
//创建两个文件流 一个是源文件相关,另一个是要写入的文件8 v1 q% |3 [; I
FileStream fs = new FileStream(@"D:\KuGoo\爱得太多.wma",FileMode.Open);# P6 Q: _) M Q: C& ~6 P
FileStream fs2 = new FileStream(@"D:\love.wma",FileMode.Create);6 e& F5 Q5 N4 P$ L' x' N
//创建一个字节数组,作为两者之间的媒介% k: s- _# _9 Y9 p( i8 ]
//好比两个人拿苹果,这个字节数组就好比一个篮子,一个人作死的把苹果送到篮子里面,0 t. T+ z+ U; |/ \% q- h9 ?: E
//而我就可以作死得拿苹果,通过这个媒介我们互不干扰,7 K$ C( D( Z2 m' u' L( s" v
//不需要互相等待【她往篮子里面放了苹果我才可以去拿】,提高了效率, a* h$ @7 j$ ]: R) z
byte[] data = new byte[1024];& k9 E8 v. O4 C1 F
//创建两个缓冲流,与两个文件流相关联
1 j& v/ t% N$ h" D" y BufferedStream bs = new BufferedStream(fs);8 U( c$ \( S& {. i9 S* ?, V, \0 J$ _) h
BufferedStream bs2= new BufferedStream(fs2);7 s- `: N* w! g1 S" [
//fs作死的读,fs2作死的写,直到fs没有字节可读fs2就不写了3 q* g5 Z0 I5 J" N+ |$ {1 X" |
//好比,一个人作死的往篮子里面丢苹果,另一个人作死得往篮子里面拿苹果,直到篮子里面没有苹果拿了为止* M3 T+ y( C* D# \% @
//即-->那个人没有苹果往篮子里面放了
; U! K- B6 `/ X1 C) C- g% `: h7 ` while(fs.Read(data,0,data.Length)>0)9 Z7 d: ]. ~4 k' K# C
{
& ^, ?' g+ u0 C9 c7 H fs2.Write(data,0,data.Length);
4 ?2 n6 i, {8 |8 V, g) K0 R fs2.Flush();9 N B# |: K9 x. I9 e2 `9 v) a0 g
}7 A( b- O" y7 z8 u N
//关闭流,好比两个人累了,都要休息 呵呵o(∩_∩)o...
9 g; B0 o. M6 t fs.Close();
9 ^% I& n, L% ~& v fs2.Close();# Z2 ?7 U4 O5 V1 H
}
2 r. c3 \: |7 Q. b4 F7 ^ C
1 L5 s3 _ [% D& I' x: V( Y. }
/ \6 b( `0 F- i0 xC#内存流示例----->用内存流来读取图片7 z8 i1 {5 m& x4 @ \$ l# }
C#文件处理操作必须先导入命名空间:using System.IO;8 D( A8 n" F+ X
) B3 V: c J3 v# H4 b5 E
背景:一个窗体、一个pictureBox、一个lable[没有选择图片,lable的text为"图片未选择"],在pictureBox1的Click事件中添加如下代码:
m6 a% ?- e+ Y: ]8 {
1 `. v; H8 S4 {, a8 pprivate void pictureBox1_Click(object sender, EventArgs e)
! ^* H0 ]0 U' B7 U/ ]$ a& Z l/ d9 v {8 m3 H) q! @" ]1 L# [; ^2 G5 E; B
//实例化一个打开文件对话框# n. u% t2 x* p( i
OpenFileDialog op = new OpenFileDialog();
& M7 z5 [* A) I9 d: H B //设置文件的类型
! R% |, D+ Q/ M* P op.Filter = "JPG图片|*.jpg|GIF图片|*.gif";
$ U8 ?7 ^' M y1 Z9 w //如果用户点击了打开按钮、选择了正确的图片路径则进行如下操作:# T% @! N: l8 ^9 }% o8 C
if(op.ShowDialog()==DialogResult.OK)
) w: t; l) i( T$ a/ @ {
. h7 t* w2 |: g# U9 E2 y //清空文本
o$ H8 G9 k* N; @1 `2 K. g: ] this.label1.Text = "";
8 h9 m+ Y8 o5 J- K: J! @ //实例化一个文件流# x3 s' P6 y2 g4 J7 \
FileStream fs = new FileStream(op.FileName, FileMode.Open);
* ]; z8 c( F+ S# b //把文件读取到字节数组
1 d7 z# j' I5 \5 W5 N byte[] data = new byte[fs.Length];1 ^$ H" V( b, a% |3 W& q
fs.Read(data, 0, data.Length);
" O% S8 \! r5 s4 z3 n9 I fs.Close();' X7 t' u1 ^1 j/ h6 a' f- X5 K
, d' E! R; f2 C$ @) @! g8 G7 `7 c G
//实例化一个内存流--->把从文件流中读取的内容[字节数组]放到内存流中去
7 |% ~4 m4 H, [0 F3 r' F MemoryStream ms = new MemoryStream(data);* _7 }% U" Q* w/ d6 F
//设置图片框 pictureBox1中的图片
6 @3 q: S" ~' J this.pictureBox1.Image = Image.FromStream(ms);
% f) d2 d0 ?" h7 S% S7 S- e }9 {/ t0 e N$ S1 ]$ H5 B
& t9 j6 j" m; _' {) _
} |