c#写文件
9 V9 ^7 k2 a. f% q- `1 I0 a; R" _, [& h
C#文件处理操作必须先导入命名空间:using System.IO;
* Y% |/ k- `! r7 F( K a6 u- y; X9 v//实现背景:一个文本框、一个按钮、VS2005
9 Z1 Y3 b! e. K1 R+ W
9 g9 F. ^2 E q3 Z$ G% w6 p方式一:用FileStream
6 }6 S" p2 @3 e
$ B# C ^" A& P2 _1 I//实例化一个保存文件对话框, p8 N/ N9 U% q
SaveFileDialog sf = new SaveFileDialog();
% [) J& }' N( M& a //设置文件保存类型
]% L+ I' S0 \1 X sf.Filter = "txt文件|*.txt|所有文件|*.*";
/ A0 L5 }( N) c& `% V8 ^ //如果用户没有输入扩展名,自动追加后缀; @+ L" ]# ^: H2 w5 z
sf.AddExtension = true;
! C* n6 U( j6 H7 v //设置标题" f7 w" D7 @3 D% E
sf.Title = "写文件";
# ^. a! I% O5 C2 E2 o8 l$ b //如果用户点击了保存按钮
" @) l; F5 F+ [0 \5 V& x5 K4 Z if(sf.ShowDialog()==DialogResult.OK)
( D$ u9 k# z6 J( v! D' |! D% L# S {" R" P9 ~, R/ u8 b
//实例化一个文件流--->与写入文件相关联% \* z3 r9 }4 \- v h
FileStream fs = new FileStream(sf.FileName,FileMode.Create);+ K$ @3 S0 Y7 W
//获得字节数组# w# I4 ?% w9 b6 ?- O) _& m
byte [] data =new UTF8Encoding().GetBytes(this.textBox1.Text);
% U, B; W# V( c: _ //开始写入
: k6 m0 _. }2 G fs.Write(data,0,data.Length);# k' S6 S6 j$ Y6 ~8 G1 C
//清空缓冲区、关闭流/ @/ ~, B! h1 I6 E
fs.Flush();% d' K: N" k5 U( o# g! e" P
fs.Close();: x& M* w* C- Y/ N
9 {: S/ p0 o, D, N2 `; J' k }% g, S. d; z0 u. J
$ P& E. T7 U: [; ~6 [$ { e2 f方式二:用StreamWriter/ P. `# {) `- w
Z! i/ c$ R$ t& O$ J# j# ?
//实例化一个保存文件对话框/ @/ n1 {& j& U) m" b0 E3 \
SaveFileDialog sf = new SaveFileDialog();3 v( Y/ D- a$ C+ B/ h/ s6 Z6 V" m
//设置文件保存类型' R; o/ G2 m. X+ R0 }8 K
sf.Filter = "txt文件|*.txt|所有文件|*.*";
% z& s! O( G2 L4 y6 ~ //如果用户没有输入扩展名,自动追加后缀7 M0 x- T& h) _) u! ]7 {+ x
sf.AddExtension = true;: S Z) [# u" {$ u
//设置标题
3 W5 v' r' `3 |5 z% X% L sf.Title = "写文件";' V4 @. r5 ? x& g
//如果用户点击了保存按钮
5 T& Y. w; P$ t5 g, @# ]" Q7 ]. T+ i if (sf.ShowDialog() == DialogResult.OK)# C7 G8 ]) _1 I$ a
{
0 W5 }1 I$ E: m* K+ G/ l$ F4 n% [2 Q' } //实例化一个文件流--->与写入文件相关联2 t8 t% _+ o6 n8 R
FileStream fs = new FileStream(sf.FileName, FileMode.Create);
( ]7 k" [! G( K //实例化一个StreamWriter-->与fs相关联
M' f1 S; E% ^5 Q2 E9 J* }" f# ]. F StreamWriter sw = new StreamWriter(fs);: m t' `1 ?2 A4 Z8 V
//开始写入
. O. u8 z- c! d0 q* Y$ h sw.Write(this.textBox1.Text);
$ S( b4 O( y: ? //清空缓冲区
1 O! T, w9 t9 ?& u: M6 F1 g* q sw.Flush();
3 g7 v% h7 \, v& U //关闭流
+ J7 f7 T! g+ ~ sw.Close();
8 V) K# @. c% v! }2 h fs.Close();( }0 F" M; O$ D6 T1 e
}7 o3 g; w* k9 l$ _/ [
7 G$ o9 ?7 y- {& x
方式三:用BinaryWriter
1 D4 R; J, Q: Y, B2 p
3 S( U4 V: E7 g$ Y! `//实例化一个保存文件对话框
; g( c' u( n& ?9 H! ~ SaveFileDialog sf = new SaveFileDialog();; ~% s5 {, K( y
//设置文件保存类型
0 H1 f! }! `8 g sf.Filter = "txt文件|*.txt|所有文件|*.*";2 P _; C2 A. h1 b/ O+ P
//如果用户没有输入扩展名,自动追加后缀2 ] o# l2 G$ k3 \
sf.AddExtension = true;
]) Y" v9 N; S4 x1 i! f1 [4 x //设置标题# `% {& f. h- Q: {6 Z7 t
sf.Title = "写文件";( o! P! ]9 t. E
//如果用户点击了保存按钮1 m- g+ @- q( e( d& `" g+ P, `
if (sf.ShowDialog() == DialogResult.OK)$ A8 o* z' h$ F
{" S1 |4 Q* C/ w- b7 i& s4 m5 b: _* q
//实例化一个文件流--->与写入文件相关联& h' P9 \1 B3 e6 J2 _0 }' G
FileStream fs = new FileStream(sf.FileName, FileMode.Create);
7 P* i. x, X% A! f1 W2 H* t4 ? //实例化BinaryWriter
( E' S8 J; Z4 I3 {3 d BinaryWriter bw = new BinaryWriter(fs);
' N4 P9 c& G) s" j3 G _' x bw.Write(this.textBox1.Text);
# I! M2 W# P h [' r9 I! O" _0 _ //清空缓冲区
Z8 H3 s% _, p: B4 t+ ?( i8 O bw.Flush();
6 e; g% ]0 h) W+ O8 w" U) U //关闭流
7 }# b# Y4 V, L! b4 J9 l bw.Close();/ H# c0 k! d+ a) e% o) Q
fs.Close();) _: N1 R' @2 {) a
}
8 g3 a U* i1 h( K# E- Q( |5 }1 i- r$ l5 M8 {: K' k
C#缓存流示例------>用缓存流复制文件( R4 l+ Q1 H- i ~; D% Y4 y
$ b% i/ V8 L% GC#文件处理操作必须先导入命名空间:using System.IO;
% U. c3 c. c( |* z: A7 t+ h# H W, U% [4 m
背景:使用VS2005、一个按钮、一个窗体、C#缓存流、把D:\KuGoo\爱得太多.wma复制到D:\并更名为love.wma,即:D:\love.wma
' }4 n5 l$ u: F u1 F- p* F8 k$ C: Y* e" y0 r
在按钮的Click事件中添加如下代码:# y- t' k& A7 {( B8 r
% {& j6 }. q+ U3 P3 ?: c5 Mprivate void button1_Click(object sender, EventArgs e)' M8 I) |2 F- k9 h0 t. q( x8 p
{" C1 c2 a/ `1 O' C! J
//创建两个文件流 一个是源文件相关,另一个是要写入的文件" |# T' u9 k) o) M5 S
FileStream fs = new FileStream(@"D:\KuGoo\爱得太多.wma",FileMode.Open);4 u9 R2 k4 G; N/ N) D) G
FileStream fs2 = new FileStream(@"D:\love.wma",FileMode.Create);0 w$ W3 L9 j& z5 w4 f2 X
//创建一个字节数组,作为两者之间的媒介
. L; ]/ }" w1 o0 \# G" g //好比两个人拿苹果,这个字节数组就好比一个篮子,一个人作死的把苹果送到篮子里面,
& @# Q. W3 X9 |. s# @7 P' E5 } //而我就可以作死得拿苹果,通过这个媒介我们互不干扰,
3 q( G u) U6 T" w1 ]: t7 b2 B2 B/ b //不需要互相等待【她往篮子里面放了苹果我才可以去拿】,提高了效率
/ e' W" v$ \% v! j' {& {: R1 t1 ~ byte[] data = new byte[1024];
$ G& z7 V( K/ ^. F0 Y4 a6 e: w //创建两个缓冲流,与两个文件流相关联2 c" W, c: x B1 h
BufferedStream bs = new BufferedStream(fs);
6 C1 s% V, w6 H# N7 L BufferedStream bs2= new BufferedStream(fs2);
1 N' [# q2 W0 M7 a# @& \ //fs作死的读,fs2作死的写,直到fs没有字节可读fs2就不写了9 k+ s" n( i& @2 |
//好比,一个人作死的往篮子里面丢苹果,另一个人作死得往篮子里面拿苹果,直到篮子里面没有苹果拿了为止( ?! B0 e& D; t/ ^/ {/ y, a
//即-->那个人没有苹果往篮子里面放了3 ]- a9 o- E p% ]8 ?; m( Q* L
while(fs.Read(data,0,data.Length)>0)& g' O. F4 j$ h0 i' |) K0 U
{
" B, Q* `) G# D" [* M6 g$ A fs2.Write(data,0,data.Length);% A9 C: l( l# U: |8 `
fs2.Flush();
& m( n: J3 w9 z6 ]3 ^: n }5 q7 N, o4 C6 o3 e4 L" ^. P
//关闭流,好比两个人累了,都要休息 呵呵o(∩_∩)o...( z. M: p( O/ M+ N3 ?- Q
fs.Close();
9 X3 u1 x; R" ?2 W fs2.Close();: V1 I' ]6 P3 @- H# i
} b/ Y! `) W9 A( r+ g4 B
W' Q R, _1 |8 a7 @" l" A0 \8 [2 `, r
C#内存流示例----->用内存流来读取图片
5 H9 i# P8 G1 Q8 ]6 s5 s7 ?C#文件处理操作必须先导入命名空间:using System.IO;
% Z8 F8 [# \5 d2 S! c- D/ z' c4 J2 Z4 Y5 v$ H" s& L; v2 r% b
背景:一个窗体、一个pictureBox、一个lable[没有选择图片,lable的text为"图片未选择"],在pictureBox1的Click事件中添加如下代码:
2 ?# a: \' x, w
6 g% a( L* N6 `% c6 M- n: bprivate void pictureBox1_Click(object sender, EventArgs e); y9 y$ Z. v; P
{& n% f+ J. ?5 a- H
//实例化一个打开文件对话框/ f( Q: P4 R0 L3 |/ R
OpenFileDialog op = new OpenFileDialog();: I: O8 j9 K8 f( W; b+ g" V
//设置文件的类型. e) S) ~5 ^: h& p* S) W
op.Filter = "JPG图片|*.jpg|GIF图片|*.gif";4 S- f' d2 n t4 ]0 c
//如果用户点击了打开按钮、选择了正确的图片路径则进行如下操作:
2 X2 ]4 [! a2 _7 t, a+ ^4 G if(op.ShowDialog()==DialogResult.OK)& e) g3 \( U: d: {+ k' w
{8 r$ e$ d. S3 E: J' ^% D
//清空文本3 X( o4 x$ a- _' ~3 ?8 f1 K
this.label1.Text = "";
* p' o1 j& }" h0 g% _4 \/ u //实例化一个文件流
0 ]5 v `* _" l# r. d5 G5 o6 O FileStream fs = new FileStream(op.FileName, FileMode.Open);
- T# r9 K: i) A3 x //把文件读取到字节数组
3 d# x! }7 \+ k1 F0 |+ S, r4 }6 e byte[] data = new byte[fs.Length];5 ^6 ^5 v" L. i" V
fs.Read(data, 0, data.Length);
t# h7 [ [* Q3 d3 a fs.Close();4 h% G, X1 l7 A w! N8 ~
3 i! Y9 \6 [+ E( f* R R
//实例化一个内存流--->把从文件流中读取的内容[字节数组]放到内存流中去% p# u6 S' b# M( X
MemoryStream ms = new MemoryStream(data);* t- ?+ Z1 G; [% d
//设置图片框 pictureBox1中的图片5 r$ `; H: w! W7 P2 r
this.pictureBox1.Image = Image.FromStream(ms);1 _9 F. {" N% d& | r) p4 J# h& R
}3 P& i- a& h- c+ Q0 O5 U- |, |0 O F( Y
4 q+ H$ o, b9 B } |