文件IO操作
1 Directory类型
2 File类型
3 FileStream类型
4 BinaryWriter和BinaryReader类型
5 StreamWriter和StreamReader类型
6 StringReader类型和StringWriter类型
7 使用内存流文件流读取数据
1 Directory类型
static void Main(string[] args)
{
DirectoryInfo dir;
if (!Directory.Exists(@"d:\root"))
{
dir = Directory.CreateDirectory(@"d:\root");
}
else
{
dir = new DirectoryInfo(@"d:\root");
}
foreach (FileInfo fileinfo in dir.GetFiles("*.cs"))
{
string name = fileinfo.FullName;
long size = fileinfo.Length;
DateTime createTime = fileinfo.CreationTime;
Console.WriteLine("{0}{1}{2}",name,size,createTime);
}
Console.ReadLine();
}
2 File类型
static void Main(string[] args)
{
if (File.Exists(@"d:\1.txt"))
{
File.Copy(@"d:\1.txt", @"d:\1backup.txt");//复制文件
Console.WriteLine("备份完成");
}
else
{
Console.WriteLine("文件不存在");
}
Console.ReadLine();
}
3 FileStream类型
namespace ConsoleApplication1
{
//使用流的操作属于非托管资源的操作,程序代码必须显示的释放与其关联的资源,否则会出现内存泄露
//将字符串转换为字节数组后才能进行流的操作,编码实现字符串类型转换为字节数组,流才能操作
//本例还可以使用using的方式using (FileStream fsw = File.Create(File_name)){…}
class Program
{
const string File_name = "test.data";
static void Main(string[] args)
{
if (File.Exists(File_name))
{
File.Delete(File_name);
}
FileStream fsw = null;
try
{
fsw = File.Create(File_name);//创建写入操作文件流
string data = "王云鹏";
UTF8Encoding encoding = new UTF8Encoding(true);//创建编码方式
byte[] datas = encoding.GetBytes(data);//将字符串转换为字节数组
fsw.Write(datas, 0, datas.Length);//通过文件流将字节数组写入磁盘
fsw.Flush();//将缓冲区的内容写入文件流,清除该流的缓冲区
Array.Clear(datas, 0, datas.Length);//清除字节数组
//FileStream文件流本身支持缓冲区,但是并不会清除字节数组里面的内容
}
catch (Exception ex)
{
Console.WriteLine(ex.Message); ;
}
finally
{
if (fsw != null)
{
fsw.Close();
}
}
FileStream fsr = null;//读取文件流
try
{
fsr = File.OpenRead(File_name);//创建文件流,操作方式为读取
byte[] data = new byte[1024];//存放从流中读取的数据
UTF8Encoding encoding = new UTF8Encoding(true);
int length = 0;
while ((length = fsr.Read(data, 0, data.Length)) > 0)
{
Console.WriteLine(encoding.GetString(data, 0, data.Length));//将实际读取的字节长度转换为字符串输出到控制台
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message); ;
}
finally
{
if (fsr != null)
{
fsr.Close();//关闭流
}
}
Console.ReadLine();
}
}
}
4 BinaryWriter和BinaryReader类型
namespace ConsoleApplication1
{
//使用流的操作属于非托管资源的操作,程序代码必须显示的释放与其关联的资源,否则会出现内存泄露
//将字符串转换为字节数组后才能进行流的操作,编码实现字符串类型转换为字节数组,流才能操作
//本例还可以使用using的方式
class Program
{
const string file_name = "test.data";
static void Main(string[] args)
{
if (File.Exists(file_name))
{
File.Delete(file_name);//通过file类的delete方法删除文件
}
using (FileStream fs = new FileStream(file_name, FileMode.CreateNew))
{
using (BinaryWriter bw = new BinaryWriter(fs))
{
bw.Write("王云鹏");
}
}
using (FileStream fs = new FileStream(file_name, FileMode.Open, FileAccess.Read))
{
using (BinaryReader br = new BinaryReader(fs))
{
try
{
while (true)
{
Console.WriteLine(br.ReadString());
}
}
catch (EndOfStreamException)
{
Console.WriteLine("文件读取已经完成!");
}
}
}
}
}
}
※ while (br.PeekChar() > -1)//判断是否已经读取完成
{
Console.WriteLine(br.ReadString());
}
5 StreamWriter和StreamReader类型
class Program
{
const string file_name = "test.data";
static void Main(string[] args)
{
using (StreamWriter sw = File.AppendText(file_name))
{
//File.AppendText方法返回一个经过包装后的文件流给StreamWriter对象,同时还指定了写入文件流中字符串的编码格式为UTF-8
sw.WriteLine("王云鹏");//直接将字符串写入到文件中的一行上
sw.Flush();
}
using (StreamReader sr = File.OpenText(file_name))
{
string line = null;
while ((line = sr.ReadLine()) != null)//直接从文件中读取一行字符串赋值给局部变量line
{
Console.WriteLine(line);
}
}
}
}
class Program
{
const string file_name = "test.data";
static void Main(string[] args)
{
using (FileStream fs = File.Open(file_name, FileMode.Append, FileAccess.Write))
{
using (StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine("王云鹏");
sw.Flush();
}
}
using (FileStream fs = File.OpenRead(file_name))//读取文件操作
{
using (StreamReader sr = new StreamReader(fs))
{
string line = null;
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}
}
}
class Program
{
const string file_name = "test.data";
static void Main(string[] args)
{
using (FileStream fs = File.Open(file_name, FileMode.OpenOrCreate, FileAccess.Write))
//FileMode.OpenOrCreat文件存在就打开文件,文件不存在就创建新文件
{
using (StreamWriter sw = new StreamWriter(fs))
{
sw.BaseStream.Seek(0, SeekOrigin.End);//将打开文件流的指针从文件开头移向文件的末尾
sw.WriteLine("王云鹏");
sw.Flush();
}
}
using (FileStream fs = File.OpenRead(file_name))//读取文件操作
{
using (StreamReader sr = new StreamReader(fs))
{
string line = null;
while ((line = sr.ReadLine())!= null)
{
Console.WriteLine(line);
}
}
}
}
}
//使用Peek方法判断是否已经读取文件完成
while((sr.Peek()>-1))
{
Console.WriteLine(sr.ReadLine());
}
6 StringReader类型和StringWriter类型
static void Main(string[] args)
{
string str = "Some number of charaters from.";
char[] b=new char[str.Length];
using (StringReader sr = new StringReader(str))
{
sr.Read(b,0,13);//读取字符串中前13个字符到字节数组中
Console.WriteLine(b);//输出读取到字节数组中的内容
}
}
StringWriter类型从字符串数组中指定的位置开始读取一定长度数量的字符,把他们写到现有字符串中
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder("Some number of charaters");
char[] b = { ' ','t','o',' ','w','r','i','t','e'};
using (StringWriter sw = new StringWriter(sb))
{
sw.Write(b,0,3);
}
Console.WriteLine(sb.ToString());
}
7 使用内存流文件流读取数据
文件流是针对文件操作的,内存流是针对内存操作的
private void button1_Click(object sender, EventArgs e)
{
if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
{
using (FileStream fs = File.Open(this.openFileDialog1.FileName, FileMode.Open, FileAccess.Read))
{
byte[] bytes=new byte[fs.Length];//创建字节数组
fs.Read(bytes,0,bytes.Length);//将图片内容读取字节数组中
using (MemoryStream ms = new MemoryStream(bytes))//创建内存流
{
Image img = Image.FromStream(ms);//从内存流中获取图片对象
this.pictureBox1.Image =img;//将图片对象显示到用户界面上
}
}
}
}
通过文件流读取图片
private void button1_Click(object sender, EventArgs e)
{
if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
{
using (FileStream fs = File.Open(this.openFileDialog1.FileName, FileMode.Open, FileAccess.Read))
{
Image img=Image.FromStream(fs);//从文件流中直接读取图片
this.pictureBox1.Image = img;
}
}
}

浙公网安备 33010602011771号