c#写文件
" ^+ o* M3 d7 o( l2 o: L- S6 O0 \( }. v
* F7 y* N, r) A' U: S5 K" i/ z& H- HC#文件处理操作必须先导入命名空间:using System.IO;
8 T* Y' I) F* q2 W# U) {//实现背景:一个文本框、一个按钮、VS20057 H; W5 K# V, Y; b' B* _. t' t
2 h0 k& A6 ]5 x3 Z1 |0 _方式一:用FileStream
2 J4 ?) }4 k& F5 R& A9 R4 T, D h: I; x, z' ]. b8 e7 I
//实例化一个保存文件对话框
" d* N8 q j+ u% a; B SaveFileDialog sf = new SaveFileDialog();- v e% ~" ^- `; e( I' |! j
//设置文件保存类型+ \: C( ~& t W V, U
sf.Filter = "txt文件|*.txt|所有文件|*.*";4 O/ j& P0 i1 f$ j' v1 c2 {2 C
//如果用户没有输入扩展名,自动追加后缀
% q5 U7 X L/ [7 Y) k0 b sf.AddExtension = true;: S7 I9 I* i$ d4 Q+ L6 l
//设置标题0 c! K; p {5 g5 A
sf.Title = "写文件";1 x. T1 c# ?" W6 {
//如果用户点击了保存按钮
5 @- J) `: B5 U& X0 A% M; ~ if(sf.ShowDialog()==DialogResult.OK)# f4 d0 j9 N) u, x" A
{
* ]$ ]5 \! c9 j/ u1 q& [: R& b //实例化一个文件流--->与写入文件相关联' e9 j) f7 J# X" w/ g* ?6 B
FileStream fs = new FileStream(sf.FileName,FileMode.Create);
4 A" W& U$ \% T: t, X# B //获得字节数组* Z6 u+ x0 i1 _* [( `6 `# q9 h
byte [] data =new UTF8Encoding().GetBytes(this.textBox1.Text);* D6 n0 k3 z( {$ J7 V$ b* [ g. B5 c
//开始写入
0 i u" t2 Z+ z fs.Write(data,0,data.Length);" k* a! V; R! N2 v8 I% A! K, Y
//清空缓冲区、关闭流: ^, I9 @* N7 d# Q6 _9 V
fs.Flush();, v8 \1 [1 F2 f) `! i( E
fs.Close();
5 l M2 t7 e$ F6 J1 i+ d
- H4 K0 r& _6 E" l8 c6 E }
2 g0 Y4 o0 l5 N% F1 m8 b
; Z& x2 |: U {& C+ `方式二:用StreamWriter8 S2 `' t+ N% Q( h. K% _
. [* E; U7 |3 b! r
//实例化一个保存文件对话框. ~% Y" x' g9 F& Q# F! L4 ~; z
SaveFileDialog sf = new SaveFileDialog();
; a* f8 e8 o: G' M3 S! C$ c //设置文件保存类型
& h: v* `% b9 G) K2 v2 A sf.Filter = "txt文件|*.txt|所有文件|*.*";
6 h. C$ I8 X$ W! z9 |- Z //如果用户没有输入扩展名,自动追加后缀8 b) U- s9 W$ v* l
sf.AddExtension = true;# M. O+ `+ I' J; l" T
//设置标题
$ E* U( D7 [4 Z" _ sf.Title = "写文件";) T0 f# E0 |' y) C. U
//如果用户点击了保存按钮
1 \4 m$ i% V' P if (sf.ShowDialog() == DialogResult.OK)& f" F( _7 `5 |1 h0 i( _
{
* B; X. k; k* Q+ ^9 ?1 O" C" k //实例化一个文件流--->与写入文件相关联9 ^9 X2 t, F7 M5 ]
FileStream fs = new FileStream(sf.FileName, FileMode.Create);
' k/ K9 P! i# r/ g) e* K* W" y9 _ //实例化一个StreamWriter-->与fs相关联: M4 [8 O0 }; O7 q3 p
StreamWriter sw = new StreamWriter(fs);
4 n, \4 {- M$ p/ B5 N: z; J. O+ t //开始写入
! L, H/ Z; |/ m! s. J sw.Write(this.textBox1.Text);7 J( h8 l8 b q1 O
//清空缓冲区
& o/ g# ]5 [$ } w1 m sw.Flush();) K( Q& m: T& a0 X3 A2 X8 x
//关闭流
; S: y' m& |& v+ B& \# w sw.Close();
. |/ h& D- U* g4 n+ d! r fs.Close();
# A' B3 W9 ]% g! n; R' @ F0 M7 C }
; n! M" m6 [" B9 b% V5 @& R" S8 r+ m. H" F Y' c! ?
方式三:用BinaryWriter
; q7 w L% U! p, v
R" `( \0 c# Z. J- l! z//实例化一个保存文件对话框) j5 x( G# u0 r' O) ~
SaveFileDialog sf = new SaveFileDialog();
5 S5 F6 s' P G8 h; Y( X$ R //设置文件保存类型 C$ s' G7 n+ o1 k) ~
sf.Filter = "txt文件|*.txt|所有文件|*.*";3 ] j3 [ D6 n( e% F2 R" I
//如果用户没有输入扩展名,自动追加后缀' o% k7 E9 `+ Z G3 L9 F
sf.AddExtension = true;
7 W' x4 H# A% b' q5 h8 K //设置标题
: ?% w+ m0 [3 V) x: f! @ sf.Title = "写文件";& Y) c( U& g9 ^4 \
//如果用户点击了保存按钮! O- z1 L+ @: a E
if (sf.ShowDialog() == DialogResult.OK)
+ e9 c+ r) v9 g8 W; b1 c( K2 { {2 U" w: m5 }1 E2 a9 N' E2 f5 a
//实例化一个文件流--->与写入文件相关联% r: x, ^0 o, M. a: ?" e
FileStream fs = new FileStream(sf.FileName, FileMode.Create);: `, i C/ V6 q1 v% B) a
//实例化BinaryWriter
- o4 L$ G! @2 Z+ Y1 E [0 D* O BinaryWriter bw = new BinaryWriter(fs);" s9 n0 @1 P2 u5 O B
bw.Write(this.textBox1.Text);# G: I' d- u: `" X
//清空缓冲区' P o" H2 R$ x2 ^, R( [$ z
bw.Flush();
4 R2 y: R$ m& e E //关闭流
! Z9 c3 _" z- _# P bw.Close();; w( C9 w% o( e5 y* e! G3 ?
fs.Close();
& E2 Y' s0 ^: n# L/ y% x }
) v7 L" M. h! ]9 t
* v; b" s a& b( @( gC#缓存流示例------>用缓存流复制文件
8 U7 R2 c! x% P+ U7 E: f5 m+ C: [* V8 o1 A/ }9 e
C#文件处理操作必须先导入命名空间:using System.IO;
, J9 L0 h! b; c8 Z" W& q
+ h; t* y5 H) R$ ?! \# i背景:使用VS2005、一个按钮、一个窗体、C#缓存流、把D:\KuGoo\爱得太多.wma复制到D:\并更名为love.wma,即:D:\love.wma
5 G6 Z6 ]2 }; X! `' A4 c
7 d: n/ \4 H& \+ ^4 v" u在按钮的Click事件中添加如下代码:* V/ N/ @( o. F& F4 P" K/ t
* w2 P: F4 {9 G8 J& z
private void button1_Click(object sender, EventArgs e)
9 w5 l1 x i Y6 R {
/ j. M" m8 h$ U0 ~# z( x1 f, _9 J$ L //创建两个文件流 一个是源文件相关,另一个是要写入的文件% R- @- S$ g; n2 M( h
FileStream fs = new FileStream(@"D:\KuGoo\爱得太多.wma",FileMode.Open);! ^# w/ B7 g A* L' O, H; l# C
FileStream fs2 = new FileStream(@"D:\love.wma",FileMode.Create);
0 t" z$ X/ \9 q6 W //创建一个字节数组,作为两者之间的媒介
. |5 c0 g& v0 t5 q. L ^, U //好比两个人拿苹果,这个字节数组就好比一个篮子,一个人作死的把苹果送到篮子里面,
4 D; o! W* {8 g" b //而我就可以作死得拿苹果,通过这个媒介我们互不干扰,/ v$ h G5 p# v$ |% w" ^
//不需要互相等待【她往篮子里面放了苹果我才可以去拿】,提高了效率
& c9 }" p* t. V- y. X byte[] data = new byte[1024];) M1 o8 Z# p: \& b0 a6 m, [0 P
//创建两个缓冲流,与两个文件流相关联
8 F0 Y8 ], f2 k/ | BufferedStream bs = new BufferedStream(fs);
$ t3 l7 @; |1 e7 d6 t4 H9 u& _ BufferedStream bs2= new BufferedStream(fs2);( b0 p }6 ?3 I( N5 p" W. Q. j; c
//fs作死的读,fs2作死的写,直到fs没有字节可读fs2就不写了" V4 q8 y; m: R% z& d# h3 B3 |
//好比,一个人作死的往篮子里面丢苹果,另一个人作死得往篮子里面拿苹果,直到篮子里面没有苹果拿了为止 K. C% |- J$ C! }5 |1 }
//即-->那个人没有苹果往篮子里面放了/ S* S N5 Q( v* M, t2 t' k
while(fs.Read(data,0,data.Length)>0), J8 F6 ]" s7 R
{+ m( L. A# W0 r- S- |
fs2.Write(data,0,data.Length);# r% @" P. d' k- o1 B6 [7 B$ z
fs2.Flush();) U; h) D+ J2 a$ j
}5 K( M. }/ F5 g+ \
//关闭流,好比两个人累了,都要休息 呵呵o(∩_∩)o...3 H( j; F) K+ t; ]9 t
fs.Close();$ n' `+ z0 ~/ Z1 L# z% S
fs2.Close();5 A9 U2 h1 i2 z: @2 q% [
}
f: g' @) {5 U8 r: m0 l% ~
' @% f6 ]3 x+ ?2 C* L; ]! ^2 X8 ~- C) o: u, W4 G" \# C# [
C#内存流示例----->用内存流来读取图片: `8 Q2 ^5 A: x$ v" T
C#文件处理操作必须先导入命名空间:using System.IO;
) ]1 o) u5 m2 @/ d$ d4 r! o, h# P& T% K+ E3 H/ h; _" V
背景:一个窗体、一个pictureBox、一个lable[没有选择图片,lable的text为"图片未选择"],在pictureBox1的Click事件中添加如下代码:! r, ^& s! }' m0 \7 X6 C
' w$ s$ F8 X; ^4 w ~3 ~. N
private void pictureBox1_Click(object sender, EventArgs e)
* r% ^$ o/ K1 s, r3 f {
7 C4 N1 `: f1 E- t8 ?% _* n$ i //实例化一个打开文件对话框
7 |/ I o. K* k- d: L% B OpenFileDialog op = new OpenFileDialog();" W0 j( T b$ H7 q& o! y
//设置文件的类型- l- c6 b l4 @$ q
op.Filter = "JPG图片|*.jpg|GIF图片|*.gif";" O9 E- }5 Y+ y. h7 f7 S
//如果用户点击了打开按钮、选择了正确的图片路径则进行如下操作:% S9 O# I2 o0 @, z; E2 |: T# C4 L
if(op.ShowDialog()==DialogResult.OK)
. O+ D! ^9 ` y Q3 h8 G5 V$ s {
$ {' d: o' _5 i) r //清空文本
1 }3 ]; R3 @& u6 H this.label1.Text = "";& Z2 d; C8 i# K+ u; y% Y( ^' B: V
//实例化一个文件流
& \% H6 P5 o) {/ {9 [2 M FileStream fs = new FileStream(op.FileName, FileMode.Open);( h) |! D# P0 R/ H
//把文件读取到字节数组" W- t8 b/ Y+ o2 ]& L7 `7 J
byte[] data = new byte[fs.Length];$ k; u! C, b2 W9 H* x' T
fs.Read(data, 0, data.Length);
" f! b& t2 o7 [ fs.Close(); C% c7 m% a, x
0 q8 n! X8 ]3 V: n8 t. M: z
//实例化一个内存流--->把从文件流中读取的内容[字节数组]放到内存流中去
w- g7 j0 L* } f/ O. K MemoryStream ms = new MemoryStream(data);
. d- j$ V- T0 P- H C9 | //设置图片框 pictureBox1中的图片
5 ? W/ _. k4 Z& D this.pictureBox1.Image = Image.FromStream(ms);
% `4 l2 m* f* X7 Y5 a }
# d" L$ h% s3 |* V9 @4 B8 T Y/ ~ ]) P4 h: `/ G% t4 B3 M2 B
} |