FileStream
• FileStream 对于在文件系统上读取和写入文件非常有用, FileStream 缓存输入和输出,以获得更好的性能。
• FileStream 类能够以同步或异步这两种模式之一打开文件,而且对同步方法(Read 和 Write)和异步方法(BeginRead 和BeginWrite)有显著的性能影响。
• 在Windows系统中,如果输入输出数据小于64KB,则采用同步模式性能较好;而当大于64KB时,则最好采用异步模式
FileSteam常用属性和方法
• CanRead:判断当前流是否支持读取。
• CanWrite:判断当前流是否支持写入。
• CanSeek:是否支持搜索。
• IsAsync:是否处于异步打开模式
• Postion:设置获取当前流所处位置
• Flush:将当前缓存区的数据写入文件
• Lock:锁定流,防止其他文件访问。
• Seek:设置当前流操作的指针位置
效果图:
代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace FileSteamOp
{
public partial class Form1 : Form
{
private string strFileName = "";
public Form1()
{
InitializeComponent();
}
private void btnCreateText_Click(object sender, EventArgs e)
{
FileStream fs = new FileStream("c://FileStreamCreateText.txt", FileMode.Create, FileAccess.Write);
//建立StreamWriter为写做准备
StreamWriter rw = new StreamWriter(fs, Encoding.Default);
//使用WriteLine写入内容
rw.WriteLine("曾经有一份真挚的爱情放在我的面前。");
rw.WriteLine("而我没有珍惜,当我失去的时候,我才追悔莫及。");
rw.WriteLine("人世间最大的痛苦莫过于此,如果上天给我一个再来一次的机会。");
rw.WriteLine("我会对那个女孩说三个字:/"我爱你。/"");
rw.WriteLine("如果非要在这份爱上加一个期限的话,我希望是一万年。");
//将缓冲区的内容写入文件
rw.Flush();
//关闭rw对象
rw.Close();
fs.Close();
fs = new FileStream("c://FileStreamCreateText.txt", FileMode.Open, FileAccess.Read);
//打开文本文件
StreamReader sr = new StreamReader(fs, Encoding.Default);
StringBuilder output = new StringBuilder();
string rl;
while ((rl = sr.ReadLine()) != null)
{
output.Append(rl + "/r/n");
}
tbMessage.Text = output.ToString();
sr.Close();
fs.Close();
}
private void btnOpenText_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "文本文件|*.txt";
dlg.InitialDirectory = "c://";
if (dlg.ShowDialog() == DialogResult.OK)
{
FileStream fs = new FileStream(dlg.FileName , FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs, Encoding.Default);
StringBuilder output = new StringBuilder();
string rl;
while ((rl = sr.ReadLine()) != null)
{
output.Append(rl + "/r/n");
}
sr.Close();
fs.Close();
tbMessage.Text = output.ToString();
}
}
private void btnCopy_Click(object sender, EventArgs e)
{
FolderBrowserDialog dlg = new FolderBrowserDialog();
if (dlg.ShowDialog() == DialogResult.OK)
{
if (MessageBox.Show("确认复制吗?", "确认对话框", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)
== DialogResult.Yes)
{
try
{
string OriginFile = strFileName;
string NewFile = dlg.SelectedPath + "//"+Path.GetFileName(strFileName );
//下面开始操作
//建立两个FileStream对象
FileStream fsOF = new FileStream(OriginFile, FileMode.Open, FileAccess.Read);
FileStream fsNF = new FileStream(NewFile, FileMode.Create, FileAccess.Write);
//建立分别建立一个读写类
BinaryReader br = new BinaryReader(fsOF);
BinaryWriter bw = new BinaryWriter(fsNF);
//将读取文件流指针指向流的头部
br.BaseStream.Seek(0, SeekOrigin.Begin);
//将写入文件流指针指向流的尾部
bw.BaseStream.Seek(0, SeekOrigin.End);
while (br.BaseStream.Position < br.BaseStream.Length)
{
//从br流中读取一个Byte并马上写入bw流
bw.Write(br.ReadByte());
}
br.Close();
bw.Close();
//操作后判断源文件是否存在
if (File.Exists(NewFile))
tbMessage.Text = "附件复制成功!/r/n";
else
tbMessage.Text = "附件复制失败!/r/n";
}
catch (Exception ex)
{
tbMessage.Text = "发生错误:" + ex.Message;
}
}
}
}
private void btnOpen_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "所有文件|*.*";
if (dlg.ShowDialog() == DialogResult.OK)
{
strFileName = dlg.FileName;
tbResFile.Text = strFileName;
FileInfo fi = new FileInfo(strFileName);
tbMessage.Text = "源文件为:" + fi.Name + ",创建时间为:" + fi.CreationTime.ToString()
+ ",大小为:" + fi.Length.ToString() + "/r/n";
}
}
}
}