c#写文件, `8 n# Y3 }. [9 d, ?! L
, u" ?7 o/ A) H
C#文件处理操作必须先导入命名空间:using System.IO; 2 O) C' V* H0 A# K& Y& q
//实现背景:一个文本框、一个按钮、VS2005
' H5 x) b7 b u* h$ G+ W
- z9 h% M* H) Y4 v8 K3 \' D方式一:用FileStream+ i; ?2 K1 y- }9 q$ A
/ n4 C/ ^- D* g' c* O2 S//实例化一个保存文件对话框9 j5 P9 w, z3 @( J/ G4 z
SaveFileDialog sf = new SaveFileDialog();4 J0 T. _. ^2 t, V
//设置文件保存类型5 j& R" p1 d1 T6 K3 m
sf.Filter = "txt文件|*.txt|所有文件|*.*";/ V5 X! F+ T3 {
//如果用户没有输入扩展名,自动追加后缀
, \" Y# L- W' L5 N+ _0 B sf.AddExtension = true;
4 H0 N8 o2 N) h& H+ v% D6 Z3 D //设置标题' e' ~7 E% s, g: M; Q# @# F/ A3 A
sf.Title = "写文件";
+ c+ ?$ H4 X- m; ~ //如果用户点击了保存按钮
% A& X2 y6 `8 o1 I4 r; ~ if(sf.ShowDialog()==DialogResult.OK)& B; h( l% S( E; \% Y* Y
{8 z+ g" x% }4 ?0 S" B9 a
//实例化一个文件流--->与写入文件相关联
5 x3 e, ~: Z; u$ K% V0 Q) [: s FileStream fs = new FileStream(sf.FileName,FileMode.Create);5 t8 C% u. u- U. q5 v
//获得字节数组
) J: _, r6 n/ c# ~( F8 V! y* ?! T byte [] data =new UTF8Encoding().GetBytes(this.textBox1.Text);
% J. X1 O; a% v$ e1 B! Y //开始写入
6 g& A* q$ A T/ Y6 o2 m9 |# A fs.Write(data,0,data.Length);, s& O; V; @$ r
//清空缓冲区、关闭流
5 |4 g5 z9 l [8 E& r+ n fs.Flush();
, `5 _1 ^. o8 i* a# j, Y fs.Close();
+ j, x G6 e; s2 m9 W7 ?( g5 A' e. `( y# u7 u9 Y }3 i5 R% \
}
0 [& N- f& f: Z% e& I( V
1 n* m; X8 I" {/ S9 \4 U4 W9 W方式二:用StreamWriter; \0 Z6 _8 e% P1 H/ r' L
2 K1 \) b; N& I
//实例化一个保存文件对话框
# e" B0 ^6 F5 A( M' C SaveFileDialog sf = new SaveFileDialog();
% Q5 h' N( e& l& r$ I) ?/ b //设置文件保存类型3 V: e8 L) j, V6 D2 E+ H$ L' g; ~
sf.Filter = "txt文件|*.txt|所有文件|*.*";( S+ @3 p$ o9 M Y
//如果用户没有输入扩展名,自动追加后缀8 S# J, {9 a6 d, z- t! f
sf.AddExtension = true;. T- [% v; l; Y$ D. Y' T3 S& e
//设置标题1 e2 b3 w& E) o) t. c, J" T
sf.Title = "写文件";
: w$ p9 } r- }: Z& N //如果用户点击了保存按钮1 b4 u6 a8 N; n# |# w! k) S
if (sf.ShowDialog() == DialogResult.OK)/ I6 `; n! e* G6 A5 t
{
0 V, U( d6 d4 R3 P' d# Z //实例化一个文件流--->与写入文件相关联. @/ M) y8 U1 h1 m; Q
FileStream fs = new FileStream(sf.FileName, FileMode.Create);
1 x- d! r5 B. T //实例化一个StreamWriter-->与fs相关联
& L! T' v, R% }5 e: L. k. F StreamWriter sw = new StreamWriter(fs);0 ]: P2 z/ f" Z. O, C$ v ^
//开始写入: X' z6 B" h7 R' z6 t' h H
sw.Write(this.textBox1.Text);
# s2 h7 P/ p# K //清空缓冲区
) P8 g, b0 J" w% C+ j1 M, F sw.Flush();
: M0 i" }; v4 m9 l! u, V7 F //关闭流
0 p# P5 {, R# n8 Q3 n# i' {5 a sw.Close();7 E* m4 P$ l5 w% E+ ~
fs.Close();; Y: Q; U8 L! p2 \
}
7 m: P8 c1 s! O: ~9 p6 Y
% B6 b/ ^6 H {方式三:用BinaryWriter7 K ` n% v e/ u; f
, V7 H' n) ~9 D0 x( S: L& ^//实例化一个保存文件对话框; R J9 k! G. e# z
SaveFileDialog sf = new SaveFileDialog();
' W6 n& i3 c) n9 ^% j: r8 U //设置文件保存类型2 j" t# l1 T _ I
sf.Filter = "txt文件|*.txt|所有文件|*.*";
3 u; Y5 Q; Z7 i) I. D9 }4 r //如果用户没有输入扩展名,自动追加后缀
4 F" |/ ]% l) D" Q# J+ }7 p sf.AddExtension = true;
% n9 _- X7 k& J- E //设置标题4 O6 \/ A! [! @4 w' R' Z4 A
sf.Title = "写文件";: _0 J9 e" q( ?- g8 a: h+ k
//如果用户点击了保存按钮
# H+ J" R4 |" t. f I if (sf.ShowDialog() == DialogResult.OK)
4 F+ t- @0 Z& ?4 v5 s% q8 N {
2 o8 C. g+ n: r5 i9 `9 M //实例化一个文件流--->与写入文件相关联9 l) v! b+ p- n c6 v
FileStream fs = new FileStream(sf.FileName, FileMode.Create);5 c. z5 `3 |; M9 P9 a/ r2 L8 \
//实例化BinaryWriter; C+ {% y. J" m% @
BinaryWriter bw = new BinaryWriter(fs);
+ _% E# t' N4 [+ U bw.Write(this.textBox1.Text);
N. G) ^3 X" c9 V& U, d //清空缓冲区
, ?. d& E9 d8 L) m( U3 ?, Y bw.Flush();5 i, o4 h2 d4 ^# S* k$ ] l( z4 w
//关闭流
^: r' i& g! `1 O/ @& U bw.Close();3 S' H! N/ z5 ^9 i1 J
fs.Close();
. z" U8 Y3 i2 n. j. } }6 t! [* x9 V5 D5 V
j, q, P/ N8 PC#缓存流示例------>用缓存流复制文件& H; Z& ]( L* e2 J
1 ]5 s: j7 P4 k+ x0 m' |
C#文件处理操作必须先导入命名空间:using System.IO;" g6 p8 }' }. l$ z+ t
, T$ [: `" n5 B) P+ i背景:使用VS2005、一个按钮、一个窗体、C#缓存流、把D:\KuGoo\爱得太多.wma复制到D:\并更名为love.wma,即:D:\love.wma
S6 p' w8 N* i2 _
5 l6 A5 f* e% o! c2 V在按钮的Click事件中添加如下代码:
* L7 q7 j' ~+ r/ ]1 U, V3 y/ v8 x$ w2 E6 C4 V F& X8 [
private void button1_Click(object sender, EventArgs e): C O4 B3 e2 S* z
{2 A0 C5 q" h s9 r& x, K$ \
//创建两个文件流 一个是源文件相关,另一个是要写入的文件
$ B5 j2 J/ u9 l! S, B FileStream fs = new FileStream(@"D:\KuGoo\爱得太多.wma",FileMode.Open);
* y7 c* I' i; X, |; E FileStream fs2 = new FileStream(@"D:\love.wma",FileMode.Create);0 q& L- Q T# p" V. E
//创建一个字节数组,作为两者之间的媒介
t- v3 ?1 ^! `9 Z //好比两个人拿苹果,这个字节数组就好比一个篮子,一个人作死的把苹果送到篮子里面,7 [( T8 a" J2 Q9 ~: \: S
//而我就可以作死得拿苹果,通过这个媒介我们互不干扰,- y. y: s( }" |3 B; K' C/ |
//不需要互相等待【她往篮子里面放了苹果我才可以去拿】,提高了效率7 m: E7 B$ C; M2 C
byte[] data = new byte[1024];
; f" F- N1 t+ ^8 W //创建两个缓冲流,与两个文件流相关联
' o* ?& j; g' J2 T! Q( Z BufferedStream bs = new BufferedStream(fs);9 L7 L3 ?. E5 a4 b4 I
BufferedStream bs2= new BufferedStream(fs2);
& s0 N7 i2 R9 {& l B- j/ H. J //fs作死的读,fs2作死的写,直到fs没有字节可读fs2就不写了
" y! b. z8 J7 |+ X //好比,一个人作死的往篮子里面丢苹果,另一个人作死得往篮子里面拿苹果,直到篮子里面没有苹果拿了为止
! `0 o) C n, E! [% W9 D1 ?- }; x //即-->那个人没有苹果往篮子里面放了, p, o* |4 j) {6 c
while(fs.Read(data,0,data.Length)>0)0 X ]6 I% |, e# J4 ~8 N6 J- d
{
1 P6 Q# J; c0 N! ` fs2.Write(data,0,data.Length);
$ c' T, a% h8 B" |) \2 b fs2.Flush();
" Z4 c5 d& g- |# f) V* g }; M9 A9 t- k- x- u- F y
//关闭流,好比两个人累了,都要休息 呵呵o(∩_∩)o..., X6 I( L$ T2 @% N* B4 k
fs.Close();! v% F- L+ O( @1 M/ M2 k
fs2.Close();
& [5 n3 e. x6 e% f2 F- ] }2 t# c- B) L" ^
( }2 ]- x; g$ [; U3 V! l6 {2 k1 x" D6 v
C#内存流示例----->用内存流来读取图片1 f0 V1 o, B2 j9 n/ q9 `
C#文件处理操作必须先导入命名空间:using System.IO;
% {2 R, F1 R/ ~- a K
; A. i4 X! j$ P7 |6 t+ M背景:一个窗体、一个pictureBox、一个lable[没有选择图片,lable的text为"图片未选择"],在pictureBox1的Click事件中添加如下代码:! ?9 N. S; m+ }% \9 X
2 ] ]% {! G( J& ~7 zprivate void pictureBox1_Click(object sender, EventArgs e)
9 |; ?: G6 o# O I: x {2 A. N& v& g# G( R6 |. S' J2 l. P
//实例化一个打开文件对话框9 ^5 J5 _3 R K2 Y% q
OpenFileDialog op = new OpenFileDialog();
! |2 K4 a/ i4 B //设置文件的类型3 d6 p) u5 R, J9 y$ k* I
op.Filter = "JPG图片|*.jpg|GIF图片|*.gif";
. L6 R* e7 K) J3 B% n$ z# \ g //如果用户点击了打开按钮、选择了正确的图片路径则进行如下操作:7 x: w- _0 h& m5 @+ W1 h3 ^
if(op.ShowDialog()==DialogResult.OK); U. N% t# W, O: d2 k
{
% j' A( @; N. S, U //清空文本0 a, j! |, t* ]' P
this.label1.Text = "";
. o7 }. R$ U. @: v //实例化一个文件流) [5 Y8 G' A3 o9 @; N3 i
FileStream fs = new FileStream(op.FileName, FileMode.Open);* w+ e4 k2 E0 F* M* l
//把文件读取到字节数组
8 I$ {4 U- z, X% C; N4 S byte[] data = new byte[fs.Length];
+ S( W7 P! ^3 D! c; f fs.Read(data, 0, data.Length);
0 X8 q$ D8 y5 J6 w0 s8 A fs.Close();
. J2 `& r4 ]0 u8 m- u7 ]: R% L% M" j
8 j) g! i2 F4 U! O; K% p2 z //实例化一个内存流--->把从文件流中读取的内容[字节数组]放到内存流中去3 Z) o# u* M$ R: p- M
MemoryStream ms = new MemoryStream(data);# i$ i% }4 @9 B$ z% B) T" n
//设置图片框 pictureBox1中的图片
- }2 W5 \; Z! X* D) ^" I; H( t1 Q this.pictureBox1.Image = Image.FromStream(ms);
% \7 u; w) c J }
7 R; X& p6 K5 K2 v8 N& w5 q6 V; |- L) v6 X! ]. [% _1 g7 J+ L- h
} |