冒险解谜游戏中文网 ChinaAVG
标题:
【汉化资料】C# 文件操作代码
[打印本页]
作者:
shane007
时间:
2009-4-11 22:09
标题:
【汉化资料】C# 文件操作代码
c#写文件
, h: q1 }# F W
. ]. c& O! }4 Q8 \
C#文件处理操作必须先导入命名空间:using System.IO;
* ^+ N( s- P2 I
//实现背景:一个文本框、一个按钮、VS2005
" G- A8 N) s' J
/ h, d3 E, m4 g r
方式一:用FileStream
/ t8 ~% A) \ A* I. o3 Q
& K4 w5 f5 m. \6 V% Q3 c
//实例化一个保存文件对话框
, x! q/ }: {6 I, l% B! q
SaveFileDialog sf = new SaveFileDialog();
( \: S- Z5 T( Z0 Q
//设置文件保存类型
6 v# x6 L; y' u7 P
sf.Filter = "txt文件|*.txt|所有文件|*.*";
/ }; ~4 W; A$ u: l, I4 K
//如果用户没有输入扩展名,自动追加后缀
3 Y& f/ _9 @- R3 e
sf.AddExtension = true;
# g5 T3 \5 U5 ]& P8 e
//设置标题
+ |8 T6 p8 d: e
sf.Title = "写文件";
9 K' ?$ o) I0 J# }$ R/ Q% E. {' i+ R
//如果用户点击了保存按钮
% B: }& h* |$ e! R+ p) O! }6 E" V
if(sf.ShowDialog()==DialogResult.OK)
4 L% O: t5 b/ U' @
{
: t& w" X$ u6 s: N
//实例化一个文件流--->与写入文件相关联
% E; ^% J a) B! b) @
FileStream fs = new FileStream(sf.FileName,FileMode.Create);
0 F7 M4 T( H- @( w+ [( M _
//获得字节数组
# L Y. m. m; W- f+ o; m
byte [] data =new UTF8Encoding().GetBytes(this.textBox1.Text);
- i( u2 y6 Q2 x
//开始写入
# f& K. \2 R; P4 m6 m& s; v5 z
fs.Write(data,0,data.Length);
, t6 T7 e5 ?' X/ H! r- `
//清空缓冲区、关闭流
9 i6 t7 k2 R9 r* S/ W4 y7 p
fs.Flush();
r4 H7 H1 A8 |5 R+ q2 }1 ]
fs.Close();
3 Q7 ~2 N( p/ [
" r3 y$ z) o6 P3 @/ Y" z$ G1 h4 O
}
2 E/ t1 Y z* e: n' }
- ~- H2 Q F2 Q, I- } y3 q
方式二:用StreamWriter
3 D" ^. E9 K) B. J f( B0 ^# w
( s# b; i. f% w9 U+ p
//实例化一个保存文件对话框
7 ?. h& R+ P% S( E+ U' G; x
SaveFileDialog sf = new SaveFileDialog();
) R* C) w5 A# l8 |- w+ ^- J, w
//设置文件保存类型
4 @0 j8 \( {( c) r# m. P, {: S' O
sf.Filter = "txt文件|*.txt|所有文件|*.*";
" i7 b: [* Y0 p6 m2 z
//如果用户没有输入扩展名,自动追加后缀
) J8 d# l: K4 J* Y7 X
sf.AddExtension = true;
0 o; E$ Q8 i, k, }- A$ V C
//设置标题
B& Q- J& Q! o/ Q% O" U+ p0 |
sf.Title = "写文件";
/ v- F3 U5 V( b" i
//如果用户点击了保存按钮
6 q6 l3 ^: _5 Z9 x" @
if (sf.ShowDialog() == DialogResult.OK)
J! C4 r2 `/ q
{
& f/ [8 r$ j' s8 k6 T: ?
//实例化一个文件流--->与写入文件相关联
* m5 R' f" U2 X
FileStream fs = new FileStream(sf.FileName, FileMode.Create);
e( k6 [3 J2 w. X$ k
//实例化一个StreamWriter-->与fs相关联
. q( t+ U {" l' @) ?# I: S4 F
StreamWriter sw = new StreamWriter(fs);
/ I s8 H, U1 [* ^2 e* q1 p+ Q
//开始写入
5 i& r0 `# S4 |) Q4 g* v
sw.Write(this.textBox1.Text);
, c* x. S$ u0 d
//清空缓冲区
) g: q1 V# v3 Z) [- U
sw.Flush();
7 z& }" q' I* g6 _/ d* Q2 m
//关闭流
: K' e2 Z5 l8 P* c
sw.Close();
d" U. v/ s. l
fs.Close();
2 A+ u, _/ [ P! w
}
! g" P- e" O% Y5 r6 K0 `# r- ^
9 J4 S. [! W, |( w c! q |
方式三:用BinaryWriter
8 T: {7 h8 w1 x% E- k# u5 C+ N6 \
8 h, I% G0 ^4 Q+ I
//实例化一个保存文件对话框
0 U& ?) j. u* d( z0 v. C6 w
SaveFileDialog sf = new SaveFileDialog();
0 w; z- Q: I4 e9 x
//设置文件保存类型
a7 u9 Z2 }' t1 Q" O2 I, E
sf.Filter = "txt文件|*.txt|所有文件|*.*";
6 a/ J# u# x) b9 S1 U& ]4 \" A
//如果用户没有输入扩展名,自动追加后缀
- E+ }/ n/ `. k' M6 D& ~
sf.AddExtension = true;
7 ~4 n; T p7 g) ?- m; U
//设置标题
, @! W) Y9 [7 t2 k! P- x2 f7 m: O
sf.Title = "写文件";
4 J# @6 x# a0 ?: Z
//如果用户点击了保存按钮
2 a. s3 E" y9 x+ v
if (sf.ShowDialog() == DialogResult.OK)
% P8 M n V' g/ i5 J
{
; M4 n$ A4 I- C& m5 |% j
//实例化一个文件流--->与写入文件相关联
- H" j* b- U( m; c. e- x
FileStream fs = new FileStream(sf.FileName, FileMode.Create);
# s) O* T3 q# V! E( H
//实例化BinaryWriter
! l3 |6 |- s2 k5 E" q$ |
BinaryWriter bw = new BinaryWriter(fs);
7 X$ E6 M3 b7 E
bw.Write(this.textBox1.Text);
# u4 ?3 M0 g: e5 c
//清空缓冲区
8 ]6 d* i/ D1 ~9 k8 p4 d |8 C
bw.Flush();
1 H+ w, H; ]0 C. o" \4 T
//关闭流
% ]- ?: r8 A- D# _; [; P: v2 w
bw.Close();
1 K J# I( |7 e# u) X. c
fs.Close();
- u; J" V W ]/ b& m4 [1 V
}
# ^- S% o) G4 I9 b% X
! \3 e3 E4 B/ \9 o$ e+ l
C#缓存流示例------>用缓存流复制文件
: v$ g" Q) \8 a
4 v% I' q+ s3 g& s" M! N/ o9 _% j- G
C#文件处理操作必须先导入命名空间:using System.IO;
' `4 L$ @$ l& A& r0 q; Z/ n" T$ R
8 i: U& J: P- O' W6 J
背景:使用VS2005、一个按钮、一个窗体、C#缓存流、把D:\KuGoo\爱得太多.wma复制到D:\并更名为love.wma,即:D:\love.wma
( ~/ L4 e: |4 N+ Z4 J+ y
8 }1 u1 a, e4 @
在按钮的Click事件中添加如下代码:
/ D% y# O. {0 I. @/ w+ q U; p
& Y* F: A& w6 `) h* ^; g+ Z. P
private void button1_Click(object sender, EventArgs e)
5 ]4 l7 I2 |& A9 r. ~
{
/ V6 y2 w7 p- ^
//创建两个文件流 一个是源文件相关,另一个是要写入的文件
, H' y5 D5 S" ]' e+ Y+ u0 f6 X
FileStream fs = new FileStream(@"D:\KuGoo\爱得太多.wma",FileMode.Open);
% d' i# A( r+ @6 I+ E
FileStream fs2 = new FileStream(@"D:\love.wma",FileMode.Create);
. n `$ u x! ?" n6 y" g( I7 j
//创建一个字节数组,作为两者之间的媒介
# Z4 y# p( ~9 L8 m8 }! Q
//好比两个人拿苹果,这个字节数组就好比一个篮子,一个人作死的把苹果送到篮子里面,
8 p+ u! D6 f" J, J( F2 Z
//而我就可以作死得拿苹果,通过这个媒介我们互不干扰,
/ V, ?9 i9 q. R/ F5 G( K
//不需要互相等待【她往篮子里面放了苹果我才可以去拿】,提高了效率
$ x8 Y6 | [, j j
byte[] data = new byte[1024];
3 M4 {* p. |# P+ N
//创建两个缓冲流,与两个文件流相关联
S' k1 Z) x: A
BufferedStream bs = new BufferedStream(fs);
% o# _: ~/ k3 g% |" X* k5 P9 k4 Q
BufferedStream bs2= new BufferedStream(fs2);
' x- W$ y! ^1 P w4 s3 N( @ \; x g
//fs作死的读,fs2作死的写,直到fs没有字节可读fs2就不写了
/ f* Q5 z6 [ z) j8 x% o
//好比,一个人作死的往篮子里面丢苹果,另一个人作死得往篮子里面拿苹果,直到篮子里面没有苹果拿了为止
/ O9 a: T. T7 ]
//即-->那个人没有苹果往篮子里面放了
0 X* I1 {; I. M0 `( }% d. v
while(fs.Read(data,0,data.Length)>0)
9 V8 P5 R; `' {/ m/ ]+ B3 K
{
* C$ c5 S) T$ L' e$ |
fs2.Write(data,0,data.Length);
' u8 y* g% \$ h
fs2.Flush();
0 y R9 E0 E, f; m( {
}
0 I( @1 `4 Q6 t5 Y
//关闭流,好比两个人累了,都要休息 呵呵o(∩_∩)o...
# X" G" ]* o2 M2 P
fs.Close();
3 c& U' t* R* p( {* L
fs2.Close();
1 F Q# a9 V# P: S0 s g
}
6 A' R" `! n$ D7 K! q, G% j
7 o( x8 e3 l& e" q% V& K- \: @
O+ V4 J( L% w2 I! O/ Q% k3 M
C#内存流示例----->用内存流来读取图片
. Y9 ^$ R" |1 s
C#文件处理操作必须先导入命名空间:using System.IO;
+ Y& u+ m2 B7 u0 a+ {4 u7 j8 ]
9 ~4 {# k( x3 O; I( {% c
背景:一个窗体、一个pictureBox、一个lable[没有选择图片,lable的text为"图片未选择"],在pictureBox1的Click事件中添加如下代码:
6 d$ w) B+ T+ f/ S n2 U
& b: U$ W% o4 w5 I3 P+ z" q$ u! l
private void pictureBox1_Click(object sender, EventArgs e)
7 p* x9 p4 y' O3 _! W
{
9 w5 ]6 B* @! Z% @: r
//实例化一个打开文件对话框
3 Y W3 ?0 j! P
OpenFileDialog op = new OpenFileDialog();
0 @, @" T5 y9 E7 r7 z
//设置文件的类型
3 T. y$ D- o' D- U7 V
op.Filter = "JPG图片|*.jpg|GIF图片|*.gif";
, w: p% h$ s6 @* b/ Z
//如果用户点击了打开按钮、选择了正确的图片路径则进行如下操作:
, Z/ V R# ^, }* n6 A- E. g/ ]
if(op.ShowDialog()==DialogResult.OK)
5 K$ _+ }& e( L+ M
{
h) e; r2 d8 S$ O" L1 G9 J
//清空文本
0 T4 A# k a* r6 i% u3 d* _2 D& Z
this.label1.Text = "";
9 O9 \2 K* _, B
//实例化一个文件流
- C F$ t }0 p) F: @
FileStream fs = new FileStream(op.FileName, FileMode.Open);
# s5 }3 m2 a/ F6 g
//把文件读取到字节数组
0 Q m4 b& |' Q+ P; Q/ O
byte[] data = new byte[fs.Length];
* q- K* Y- _/ T Q$ W- |5 X
fs.Read(data, 0, data.Length);
5 Z; j# A c* E9 {8 d) T7 B3 t' i
fs.Close();
6 M6 `+ b- t& L% E
, Y% {* \, M8 N4 G$ M
//实例化一个内存流--->把从文件流中读取的内容[字节数组]放到内存流中去
$ @; v, C2 ^* _5 z$ r/ w
MemoryStream ms = new MemoryStream(data);
$ v% d# ~$ O. e& @% p3 a
//设置图片框 pictureBox1中的图片
# I% m0 u! k. e. ^7 v4 T# K
this.pictureBox1.Image = Image.FromStream(ms);
, R$ O6 q5 w6 A, }: n% R" y* |6 x
}
. v8 t6 z6 Z0 m8 Y/ l' ?9 p
& x, `8 C( |# z2 [3 W; Y% e. n
}
欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/)
Powered by Discuz! X3.2