c#写文件2 @1 D5 H# W" h" U
# T+ q& k: r/ }C#文件处理操作必须先导入命名空间:using System.IO;
% o) v! f4 u& v/ [/ O/ W! D//实现背景:一个文本框、一个按钮、VS2005
u) a4 V3 Q+ G ^7 U7 @2 q8 m; q" ? t
方式一:用FileStream1 U. C# Q6 ]! Y, b% w% {# Q
: |9 D# c2 e [) g5 f8 I+ \5 M! P8 D% t
//实例化一个保存文件对话框
2 p8 L! \! E( p1 l% Q0 v SaveFileDialog sf = new SaveFileDialog();
( t u: G; n/ O' z* z) ?4 i } //设置文件保存类型( ~9 G" ~5 X5 y' {
sf.Filter = "txt文件|*.txt|所有文件|*.*";" H# @5 m7 C. {1 H% u7 U4 P8 |
//如果用户没有输入扩展名,自动追加后缀/ {; V3 a) P; w1 o
sf.AddExtension = true;
$ r _$ l2 f& ]- u //设置标题9 R* y1 b8 r' o, }) C# r% \3 r. B
sf.Title = "写文件";1 d8 a" u. @( ~0 [
//如果用户点击了保存按钮" t j- P5 ~" `
if(sf.ShowDialog()==DialogResult.OK)
+ P1 ?) [& t, g1 o( q {) T: D7 s! y9 f4 _* Y
//实例化一个文件流--->与写入文件相关联
( ~. T: | Y. r. B# X4 }0 p$ Y FileStream fs = new FileStream(sf.FileName,FileMode.Create);2 F/ h- f" W. x
//获得字节数组" q4 f) Z0 q$ l9 I/ |7 w; e
byte [] data =new UTF8Encoding().GetBytes(this.textBox1.Text);, v- p7 r* r6 D# n. Y0 D9 P
//开始写入& j6 H ?/ k/ k) W4 q) k7 [
fs.Write(data,0,data.Length);- q O! Y* Y1 ?0 R9 n2 ~" X
//清空缓冲区、关闭流
6 n0 u' ]& G4 b' E fs.Flush();/ W; X0 v; L) e: h8 J
fs.Close();" D. M! _% @* b. d7 }" h3 L
0 y9 j- R7 x. ?# _' N2 F+ i0 b5 ~( Z
}& n" }& s1 t1 W
. {$ D; s! u$ T V/ ~: O+ w b4 `方式二:用StreamWriter& n3 Q0 l1 z* {" I
1 k% j w* O+ m2 J//实例化一个保存文件对话框7 E, \, v" T3 J% r8 I
SaveFileDialog sf = new SaveFileDialog();9 c0 v" c1 j5 o# G, F5 B3 z( b7 P+ M7 U
//设置文件保存类型, x1 j; t- F1 U E1 E2 G7 |
sf.Filter = "txt文件|*.txt|所有文件|*.*";. F7 J( ?) K* [1 Q. a$ |" |
//如果用户没有输入扩展名,自动追加后缀0 }8 p) ]; h6 o$ {: a
sf.AddExtension = true;8 D; B+ _, N0 O5 N
//设置标题# H% P- \/ p3 d9 Z7 T
sf.Title = "写文件";$ B0 r/ y, W' m
//如果用户点击了保存按钮
N' m* Q5 V- X6 a0 r" |5 D2 |7 ^ if (sf.ShowDialog() == DialogResult.OK). g7 c$ U& q& V6 _- G$ s
{
, I* i1 o; V1 V8 d9 Y" Y //实例化一个文件流--->与写入文件相关联
& v$ I# N( W/ K2 K FileStream fs = new FileStream(sf.FileName, FileMode.Create);. J6 `4 T& [& S, B0 T5 r/ D
//实例化一个StreamWriter-->与fs相关联
7 K9 I3 a: d u# a, F/ d. F% n- { StreamWriter sw = new StreamWriter(fs);
' E7 ~! n- y6 x' d3 S) t //开始写入3 i7 X+ ?% s2 d6 r( x
sw.Write(this.textBox1.Text);
0 X6 I# Q' Y& s1 P //清空缓冲区+ i/ M# A. q% Q
sw.Flush();5 a! h$ K/ H6 I3 N9 x( B
//关闭流
, @' B: F0 ^+ {7 `3 E4 f sw.Close();
) f0 i6 t, c0 M: N% G6 ]- g fs.Close();9 r6 v: F! Z$ l* \% U1 d9 I
}, G% B- x, G' H% v( a1 ^& [( j
# R# ?; ^! _' x/ B
方式三:用BinaryWriter
1 S5 ?3 s I1 v" r* V# S B/ z" g i1 J+ K
//实例化一个保存文件对话框
' t" H5 l) _2 @7 L) D9 o5 y2 ? SaveFileDialog sf = new SaveFileDialog(); L M; O7 I$ L* f
//设置文件保存类型
3 d' o. o7 M* l1 o2 w& Y' c% O sf.Filter = "txt文件|*.txt|所有文件|*.*";. j2 G" J: s f) w/ O
//如果用户没有输入扩展名,自动追加后缀
9 E' m0 e' W# j1 C. k ~ sf.AddExtension = true;2 R$ y7 V8 f( [
//设置标题0 ?$ r: r; G8 R; u- D7 y' P
sf.Title = "写文件";
; H. Q3 Q6 E- J! D9 C8 }7 g1 c //如果用户点击了保存按钮) U) u* i& b. I& u3 O8 W: {+ c: h
if (sf.ShowDialog() == DialogResult.OK)( o+ ^% [& G( {- j
{
4 D& N9 w* T' J& w2 D //实例化一个文件流--->与写入文件相关联
& y. e8 H5 K1 y/ j N! m FileStream fs = new FileStream(sf.FileName, FileMode.Create);: j4 I4 r, w+ I4 f$ A% L$ x/ m
//实例化BinaryWriter8 F* X& v% q3 A+ u: [# T
BinaryWriter bw = new BinaryWriter(fs);
8 A4 c N& v( _5 J, B bw.Write(this.textBox1.Text);) e d6 W! V3 h7 |8 g
//清空缓冲区# a: n3 o9 ~% e& l) ~9 h
bw.Flush(); L4 |4 |) H8 g' g1 K5 j* f4 \
//关闭流
W3 l" g0 B8 m; q) L bw.Close();
' N5 {7 H. Z2 i7 ?; B1 Z; p fs.Close();6 S8 B3 x. m2 Q' @+ V
}9 \2 f# ?2 y$ R2 b6 ~1 [! b4 g% o/ @. k
; ]5 Q' v- P" s! O2 g( q& `
C#缓存流示例------>用缓存流复制文件! q5 \- W0 o: p) B
$ L* C; e" T9 Y" t- O! qC#文件处理操作必须先导入命名空间:using System.IO;4 } D/ y' U Z: X" b
: Q- |8 ^! _1 w0 r, S X背景:使用VS2005、一个按钮、一个窗体、C#缓存流、把D:\KuGoo\爱得太多.wma复制到D:\并更名为love.wma,即:D:\love.wma& f2 k! y" z# F& A' @6 o- y; x
9 k. P8 r% w3 X& Q在按钮的Click事件中添加如下代码:
# V' h* `1 _9 K8 g3 @
% |5 H$ B! K. \; Iprivate void button1_Click(object sender, EventArgs e)0 i# J- z) B% Y) P- g( @& Q
{, L# K) ]/ P; G* O" P4 M
//创建两个文件流 一个是源文件相关,另一个是要写入的文件- r5 C8 ~+ q3 w. G
FileStream fs = new FileStream(@"D:\KuGoo\爱得太多.wma",FileMode.Open);, f# u$ e/ C+ r% E
FileStream fs2 = new FileStream(@"D:\love.wma",FileMode.Create);
; A( w- z: n/ ~# q ]# F1 [5 t4 K; D //创建一个字节数组,作为两者之间的媒介
" V- d: x: a# k5 q0 i2 z$ { //好比两个人拿苹果,这个字节数组就好比一个篮子,一个人作死的把苹果送到篮子里面,- @6 z: V. F. N2 ]9 O
//而我就可以作死得拿苹果,通过这个媒介我们互不干扰,$ j: U5 A ?& e, v! W
//不需要互相等待【她往篮子里面放了苹果我才可以去拿】,提高了效率3 Y. O8 E* G8 n2 B2 {8 a5 d y* p
byte[] data = new byte[1024];
# K' d# S) h" R6 f0 c8 s* U/ p4 K //创建两个缓冲流,与两个文件流相关联& u$ n3 l7 e! B8 [6 k3 m. g
BufferedStream bs = new BufferedStream(fs);3 X3 M+ H8 X0 @7 ~) N
BufferedStream bs2= new BufferedStream(fs2);
" b6 O9 g3 |4 B2 f- E- W9 a //fs作死的读,fs2作死的写,直到fs没有字节可读fs2就不写了* M* Q" d v0 p; w6 K
//好比,一个人作死的往篮子里面丢苹果,另一个人作死得往篮子里面拿苹果,直到篮子里面没有苹果拿了为止" h0 s6 Q- p6 ^; Q" d0 F7 f
//即-->那个人没有苹果往篮子里面放了% A7 q U9 u; f, C$ I
while(fs.Read(data,0,data.Length)>0)& x, O# ?7 J' ]
{
9 r! H. n- e5 C+ f, T/ Y' ?. m3 I fs2.Write(data,0,data.Length);
. x1 M) M; {3 T# z1 y6 O# e fs2.Flush();9 g5 |, b; ~% a
}) F. K) z3 W9 ^8 H5 `( b5 n
//关闭流,好比两个人累了,都要休息 呵呵o(∩_∩)o..." ~: u! J9 R" Z9 T3 p
fs.Close();
! I5 o) [& `6 O, i) C fs2.Close();
. L m6 v y7 R' a* O' v- A }/ V, X+ Y: Y9 E9 r1 C, Q
; U( Z5 Y' B2 S0 B/ z, I+ l) F5 o' X2 Z7 n
C#内存流示例----->用内存流来读取图片! x" t1 f! C5 V: c! x9 g" G
C#文件处理操作必须先导入命名空间:using System.IO;' F) a7 K; W* w3 J5 o6 e7 [
; r5 q/ d2 v1 {2 `8 {5 f
背景:一个窗体、一个pictureBox、一个lable[没有选择图片,lable的text为"图片未选择"],在pictureBox1的Click事件中添加如下代码:" h" Z' r. _5 B% T) H: [
7 l! Q2 ?' k9 P" n" u2 Cprivate void pictureBox1_Click(object sender, EventArgs e)
: M1 s1 c2 J5 Q9 u% k6 w# d {
5 r: z- Y; a9 g( y //实例化一个打开文件对话框* n! z2 f( @# [
OpenFileDialog op = new OpenFileDialog();
3 c" }6 y5 K1 C- e/ H //设置文件的类型- U" e v% }5 \& S; T
op.Filter = "JPG图片|*.jpg|GIF图片|*.gif";* K6 Q+ Y- a4 t# k, ]$ G
//如果用户点击了打开按钮、选择了正确的图片路径则进行如下操作:6 s5 j: N/ m7 ?" B4 T1 D3 i
if(op.ShowDialog()==DialogResult.OK)/ f5 w0 s* p2 u% f8 G# f" w
{
+ w7 L* ?) F! u L: Y+ n( e' E //清空文本
6 d) [+ w$ N4 n# l8 _ this.label1.Text = "";
/ Z- m! h) M- m9 X2 E5 g //实例化一个文件流
" Z+ H& O3 B9 ] y0 k$ h FileStream fs = new FileStream(op.FileName, FileMode.Open);! B" u2 a! U s+ H1 j" {
//把文件读取到字节数组
5 l8 d% v7 X5 E+ ?3 M byte[] data = new byte[fs.Length];& u/ G# O! {4 ]9 W6 {
fs.Read(data, 0, data.Length);
7 T/ V+ [% f! i7 N, ^/ i# Z fs.Close();# Z" k& f- `$ G) ?4 D
+ ~, a7 o6 B" Q. c0 a" w //实例化一个内存流--->把从文件流中读取的内容[字节数组]放到内存流中去2 ^! G1 L6 h7 {/ K. o- h2 ]( E. _' k
MemoryStream ms = new MemoryStream(data);
# s" r: B5 J7 L7 V# z; ?6 D4 j //设置图片框 pictureBox1中的图片8 N& @( L. @& ?! N7 D i& C
this.pictureBox1.Image = Image.FromStream(ms);
6 @3 R2 [1 p3 i+ @- @5 g }
7 g' `8 O7 L6 P* n2 g8 N$ Q F/ p
4 b" S8 l# g) e; N/ H$ l* c: W; b } |