c#写文件
- H" k1 |( P2 I8 m2 t% d9 y# ]6 j" S/ Q5 Q, V
C#文件处理操作必须先导入命名空间:using System.IO;
; ~) W) U8 r" P4 T//实现背景:一个文本框、一个按钮、VS2005% k( C) n1 y, c
. J% y J9 W9 q2 p2 L) W方式一:用FileStream
" x) m0 j4 V; F2 g- P
3 T+ M4 H& I) h M7 O8 u//实例化一个保存文件对话框
" G. k' O: Y2 b5 z SaveFileDialog sf = new SaveFileDialog();
- g& M" T" C" T3 n# ? //设置文件保存类型
( O8 |7 k" t. c; X" R sf.Filter = "txt文件|*.txt|所有文件|*.*";
% d+ u6 [% {1 R2 u6 Q& K1 J //如果用户没有输入扩展名,自动追加后缀
/ ]& R8 k Y8 a2 p sf.AddExtension = true;
: I( n8 a, U O. a+ r //设置标题9 l* ~0 g; K+ X
sf.Title = "写文件";/ ?( I4 h; N5 f( r3 u7 k
//如果用户点击了保存按钮% N' l% S2 L4 s' G& E
if(sf.ShowDialog()==DialogResult.OK)) ~( ~4 a8 A1 Q, T
{& u$ X+ o( Z& ^ F
//实例化一个文件流--->与写入文件相关联
( q/ w+ y8 Q6 @7 k3 C FileStream fs = new FileStream(sf.FileName,FileMode.Create);
+ h5 T! X, G' p# ^ //获得字节数组8 X5 Z: H5 c- ~/ V
byte [] data =new UTF8Encoding().GetBytes(this.textBox1.Text);
1 @* p, U- \: [4 ^ //开始写入
5 z* s6 ]. i- \0 _: s fs.Write(data,0,data.Length);. t; K2 V+ d q; C& U
//清空缓冲区、关闭流
. {( ?, o- d/ }, c fs.Flush();% Z$ ?# U" u0 t, N- S
fs.Close();
! P3 N' m( s, p* S6 F% Y
5 s4 S& @" n. [4 k5 H0 m }6 X- z V( h m8 |" U: y
* H* v5 G8 `# {" p; w
方式二:用StreamWriter
: P2 `' B( W, c9 l! {/ a) V% S8 {& p$ c9 p8 s s/ Z
//实例化一个保存文件对话框
% ^0 |; d* ^$ } |4 v SaveFileDialog sf = new SaveFileDialog();
0 P# V, \4 d1 C* ^! C( Y5 N+ f //设置文件保存类型
% q. S: Y. x( e sf.Filter = "txt文件|*.txt|所有文件|*.*";
+ g; i8 E; f7 B1 L" W //如果用户没有输入扩展名,自动追加后缀
; ~! n3 e' A; D5 V9 t+ t/ P: ] sf.AddExtension = true;/ ^3 C8 }% v& l# z9 \
//设置标题
5 `! L. |/ r$ N& W+ V sf.Title = "写文件";
5 Y/ ]3 \. F% g% K6 Q% i //如果用户点击了保存按钮
: J; J0 F5 i% t0 Z/ j if (sf.ShowDialog() == DialogResult.OK)% e; C3 N1 C7 ~% X7 l1 Z
{
- y N2 O1 {8 D8 F //实例化一个文件流--->与写入文件相关联8 z, \& O0 b4 |6 z2 f, H
FileStream fs = new FileStream(sf.FileName, FileMode.Create);
& c# b4 c. P: D. c, O5 @ //实例化一个StreamWriter-->与fs相关联
# S$ y c7 m% ?& X StreamWriter sw = new StreamWriter(fs);! Q% w1 P9 S$ l" k8 V
//开始写入
~& v( E9 c5 P5 ^& l sw.Write(this.textBox1.Text);
S9 w2 `, ?: Z" g1 k) S //清空缓冲区
$ B& R& t$ U+ j( P$ t sw.Flush();
, z* @. D$ w2 T/ u3 i3 ]# V4 y1 ^ //关闭流* ~- c2 s9 [" Y) Q! G) f U
sw.Close();8 q/ u0 c) l7 m4 T9 F5 P
fs.Close();
u; V# c0 h a( N7 M$ P }' n# ]3 ?6 I" t9 N) }- k
' Y2 V, s; o( A方式三:用BinaryWriter
& }' d8 z) _- l
% b; S& m) i$ ^* ]. V: I6 D//实例化一个保存文件对话框
+ q; b1 O( m% G' w" @8 s SaveFileDialog sf = new SaveFileDialog();; W# X$ n5 N4 f& {4 C: x% ~
//设置文件保存类型, f0 y1 l) ?( _ }8 o2 i' L* x5 @
sf.Filter = "txt文件|*.txt|所有文件|*.*";
4 e: b' a' m a; F+ c% Q) p //如果用户没有输入扩展名,自动追加后缀
1 m' [4 t6 B' e sf.AddExtension = true;
2 Y" k8 U" `; b# E8 F8 i //设置标题
- W8 M$ a# ?3 L* T0 d5 U9 H sf.Title = "写文件";
7 {* p' r, i; i% Q, T- m5 q9 F //如果用户点击了保存按钮& w2 r+ V* A) K+ ~9 z6 @
if (sf.ShowDialog() == DialogResult.OK)
) N9 @4 x" @' P, \9 ?) h3 ` {% w' S) h5 v V' P% F
//实例化一个文件流--->与写入文件相关联3 a; W/ ]3 j( @* N D- X L- S
FileStream fs = new FileStream(sf.FileName, FileMode.Create);: m4 W' o# e% c# G8 z% ~
//实例化BinaryWriter
: r7 w6 j" i! T' V J$ f BinaryWriter bw = new BinaryWriter(fs);
2 d4 C; O1 E, D! |$ K" H& h1 c bw.Write(this.textBox1.Text);7 p& @1 O4 a; ^* t7 q
//清空缓冲区7 n0 i, B# R' W# N A
bw.Flush();6 p% y4 x( m* d/ m
//关闭流
) M! V& @( g& K% S1 X5 M' z2 a bw.Close();* d7 }4 p+ t8 A2 d0 @! a
fs.Close();
7 w6 ~" L' Z' R! d }; {. c, O7 c- g, ]. K9 x1 J. X
C/ o% A' S. D5 _- `2 ~C#缓存流示例------>用缓存流复制文件
& `! Z, Z* x5 ~! J# h# g* k: e
) ]2 F( _% N+ j+ a) e C# UC#文件处理操作必须先导入命名空间:using System.IO;
1 N8 W& u+ ]$ P9 E
3 c7 \5 c0 W& U1 H q3 {3 }背景:使用VS2005、一个按钮、一个窗体、C#缓存流、把D:\KuGoo\爱得太多.wma复制到D:\并更名为love.wma,即:D:\love.wma {2 p, c$ X7 c
6 G' F7 H, }% Y! [& m9 V: T
在按钮的Click事件中添加如下代码:5 |& w9 X) R7 w( j
. k1 B1 u; L6 E' w" j: `
private void button1_Click(object sender, EventArgs e)
, K p' j" g. S; c. L; `5 j/ b {7 J) W) ~5 U% p5 V/ `/ X2 z7 y, `
//创建两个文件流 一个是源文件相关,另一个是要写入的文件
5 ~9 d" z* \, ^* O0 l FileStream fs = new FileStream(@"D:\KuGoo\爱得太多.wma",FileMode.Open);
$ ?6 W) D- v. a- [# ^! J FileStream fs2 = new FileStream(@"D:\love.wma",FileMode.Create);
, o% C4 T- E$ q- O [- R# K# v //创建一个字节数组,作为两者之间的媒介, {% M5 V2 e" k
//好比两个人拿苹果,这个字节数组就好比一个篮子,一个人作死的把苹果送到篮子里面,
2 Z: q# E7 E p% S) N4 i$ H$ C //而我就可以作死得拿苹果,通过这个媒介我们互不干扰,
. Z6 u C3 ]& g2 z& ^ //不需要互相等待【她往篮子里面放了苹果我才可以去拿】,提高了效率
! {6 {& v9 q, O2 V byte[] data = new byte[1024];6 P! U5 O8 G; N
//创建两个缓冲流,与两个文件流相关联- Y% q) d5 o U9 o# g& y
BufferedStream bs = new BufferedStream(fs);
8 {* Z9 O2 p( R/ H: o3 J7 a BufferedStream bs2= new BufferedStream(fs2);: Y# q' e* b# j* Q) w
//fs作死的读,fs2作死的写,直到fs没有字节可读fs2就不写了4 a& C/ F4 e3 H7 j+ M
//好比,一个人作死的往篮子里面丢苹果,另一个人作死得往篮子里面拿苹果,直到篮子里面没有苹果拿了为止
( q, V C0 [! F1 s6 _- C //即-->那个人没有苹果往篮子里面放了1 k- I; J# q3 L
while(fs.Read(data,0,data.Length)>0)* \2 C0 W! d7 Z0 A& E
{
8 p8 p4 l0 n; C) b/ W fs2.Write(data,0,data.Length);9 T [% T: X9 j
fs2.Flush();
3 f& R7 }: j7 G }
2 w3 b5 L4 g r2 j //关闭流,好比两个人累了,都要休息 呵呵o(∩_∩)o...0 n$ ~$ A1 A" x7 n& R8 t( p s
fs.Close();
! U( M+ k9 Z1 q5 }% Z% N fs2.Close();
. V2 C, `: T% x. y+ D7 E. L }) N; J1 Z; b- n9 i: j: r
- C. t# _! N6 ~2 f- M
/ O% I+ o: H$ j
C#内存流示例----->用内存流来读取图片' t! f% ]6 |1 S% U/ A
C#文件处理操作必须先导入命名空间:using System.IO;/ R9 ], e8 c2 j$ ^- F
3 Q" o+ e/ J% r. Y3 X" c U背景:一个窗体、一个pictureBox、一个lable[没有选择图片,lable的text为"图片未选择"],在pictureBox1的Click事件中添加如下代码:
. C2 y9 J: Z6 Z) n+ W2 N4 w+ H) f
private void pictureBox1_Click(object sender, EventArgs e)2 f* u) p0 T9 F P( H) c
{
$ _7 b! w, _6 e$ N //实例化一个打开文件对话框
+ J& d2 h+ t! C1 E1 ]7 G; F$ q OpenFileDialog op = new OpenFileDialog();
8 x' _$ _6 H* N2 b' O //设置文件的类型
( d7 C7 g* o( f* F. _7 b op.Filter = "JPG图片|*.jpg|GIF图片|*.gif";0 I2 _& m+ D$ p/ @
//如果用户点击了打开按钮、选择了正确的图片路径则进行如下操作:
# e# X% L% N1 b& }& P0 ? if(op.ShowDialog()==DialogResult.OK)
* C+ x( D$ Y* N9 E( y M! Z$ @ {
A& T8 _. K0 \1 w6 C. \! {, k$ o //清空文本 g4 ` l% W) j2 D1 {
this.label1.Text = "";
; c4 l% v' j# w+ \0 G% z% ~ //实例化一个文件流
3 h" c0 l" j u5 i FileStream fs = new FileStream(op.FileName, FileMode.Open);
! j) x: O. |# j- }7 i //把文件读取到字节数组
! ~! F& I5 o o9 Q5 R; d byte[] data = new byte[fs.Length];) c- S; n' K! p3 C
fs.Read(data, 0, data.Length);/ v7 q' k: h) s! Z
fs.Close();
3 p. ~3 G J1 v7 B# u- \. s4 q% K
//实例化一个内存流--->把从文件流中读取的内容[字节数组]放到内存流中去
8 Q; {4 @3 D! b2 B6 a- w. |% l MemoryStream ms = new MemoryStream(data);
. E4 N A5 Q ?' F, ` //设置图片框 pictureBox1中的图片
) Y' e) r: n7 k: Y( r this.pictureBox1.Image = Image.FromStream(ms);
: C- g/ j5 A8 N# n, a" t }) N* N/ w7 z0 U; B
; c3 o3 S* E+ y' ]5 d2 q1 e0 ]2 K } |