您的位置:首页 > 编程语言 > C#

C#学习第十天 文件操作、文件流

2015-05-04 14:47 323 查看
一、Path类

Path类是静态类,在命名空间IO中,专门用来处理路径一类的;Path能实现的功能,字符串也能实现,只是Path提供方便简洁的方法:

Console.WriteLine(Path.GetFileName(str)); //快速获得文件名
Console.WriteLine(Path.GetFileNameWithoutExtension(str)); //快速获得不包括后缀的文件名
Console.WriteLine(Path.GetExtension(str)); //快速获得文件名
Console.WriteLine(Path.GetDirectoryName(str)); //快速获得文件所在的文件夹
Console.WriteLine(Path.GetFullPath(str)); //快速获得文件所在的全路径
Console.WriteLine(Path.Combine(@"D:\360Downloads\HotFix\","一路有你.wav")); //将两个字符串组合成路径


二、File类:
File类也是静态类,用来处理文件,编辑读写等

优点:方便快捷;   缺陷:只能读写小文件

File.Create(@"C:\Users\tufeiax\Desktop\new.txt");
Console.WriteLine("创建成功");

删除一个文件(彻底删除,不会到回收站)
File.Delete(@"C:\Users\tufeiax\Desktop\new.txt");
Console.WriteLine("删除成功");

//复制一个文件
File.Copy(@"C:\Users\tufeiax\Desktop\new.txt",@"C:\Users\tufeiax\Desktop\123.txt");
Console.WriteLine("复制成功");


1、读文件:

1)ReadAllBytes:当文件不是文本形式,而是音乐、视频等文件时,需要使用此方法

//读取文件,转成字节数组,返回字节数组
byte[] buffer = File.ReadAllBytes(@"F:\学习\C#\视频\传智播客视频学习\3.2014年 .Net基础\下载必看.txt");
//将字节数组中的每一个元素按照我们指定的编码格式解码成字符串.UTF-8 GB2312  GBK ASCII
string s = Encoding.Default.GetString(buffer);


2)ReadAllLines:需要单独操作每一行时选用

string[] str = File.ReadAllLines(@"C:\Users\tufeiax\Desktop\new.txt",
Encoding.Default);
foreach(string item in str)
Console.WriteLine(item);
3)ReadAllText:读取所有文本中所有数据时选用

string str = File.ReadAllText(@"C:\Users\tufeiax\Desktop\new.txt",
Encoding.Default);
Console.WriteLine(str);


2、写文件:与读文件对应
1)WriteAllBytes:

//写文件,如果没有此方法会创建,如有则覆盖
string str = "人生得意须尽欢";
//写之前需将字符串转换成字节数组
byte[] b = Encoding.Default.GetBytes(str);
File.WriteAllBytes(@"C:\Users\tufeiax\Desktop\new.txt",b);
2)WriteAllLines

3)WriteAllText

以上三种方法,如果该路径没有这个文件,则新建并写入,如果有这个文件,则覆盖原数据

3.追加文件:

1)AppendAllText

2)AppendText

3.文件的路径:   绝对路径和相对路径

绝对路径:文件的精确路径

相对路径:文件相对于应用程序的路径

比较: 在程序开发中,应该尽量使用相对路径

三、文件流:FileStream  ---最重要的文件操作类,因为可以处理大文件,可以处理字节(可以处理所有文件)

FileStream相对于File来说,方法更多更全面,适合大文件操作(几百k以上),可以控制读取和写入的量,不会太耗费内存

FileStream(String, FileMode, FileAccess)

1. 读取数据

第一步创建对象:

FileStream fsRead = new FileStream(@"C:\Users\tufeiax\Desktop\123.txt",
FileMode.OpenOrCreate,FileAccess.Read);第二步设置每次读写大小:

byte[] buffer = new byte[1024 * 10245 * 5];//每次读取5M (耗费内存的大小)第三部操作数据:

读取

int r = fsRead.Read(buffer,0,buffer.Length); //返回本次实际读取到的有效字节数

第二个参数是开始读取文件的位置,第三个参数是读取长度

解码

//将字节数组中每一个元素按照指定的编码格式解码成字符串形式
string s = Encoding.Default.GetString(buffer,0,r);//第二个参数是解码位置,第三个解码个数

第四步、关闭流,释放资源

fsRead.Close(); //关闭文件流
fsRead.Dispose(); //释放流所占的资源

自动释放资源方法:

将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源

2、写入数据:

using(FileStream fsWrite = new FileStream(@"C:\Users\tufeiax\Desktop\123.txt",
FileMode.OpenOrCreate,FileAccess.Write))
{
string str = "看我有没有把你覆盖掉";
byte[] buffer = Encoding.Default.GetBytes(str);//转成字节数组
fsWrite.Write(buffer,0,buffer.Length);
}
Console.WriteLine("写入成功");

四、StreamReader / StreamWriter
//使用StreamReader来读取一个文本文件
using(StreamReader sr = new StreamReader(@"C:\Users\tufeiax\Desktop\123.txt",Encoding.Default))
{
while(!sr.EndOfStream) //判断是否读到文件末尾
Console.WriteLine(sr.ReadLine()); //读取一行文本,sr。ReadLine()直接返回字符串
}
//使用treamWriter来写入一个文本文件
using(StreamWriter sw = new StreamWriter(@"C:\Users\tufeiax\Desktop\xxx.txt",true))
{
sw.Write("人生如梦!");
}
Console.WriteLine("写入成功");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: