文件类
1.path类
- 概念:
1.Path类主要用于对路径字符串进行操作,并且提供了对路径操作的常用方法
2.它是静态类,不能创建对象
- path所提供的方法:
path.GetFileName() | 从路径字符串中得到文件名(带扩展名) |
path.GetFileNameWithoutExtension() | 从路径字符串中得到文件名(不带扩展名) |
path.GetExtension() | 从文件路径字符串中得到文件的扩展名 |
path.GetDirectoryName() | 得到文件所在的文件夹的名称 |
path.GetFullPath() | 从文件字符串中得到包括文件名和扩展名的全路径名 |
path.Combine(文件名1,文件名2) | 合并两个文件路径字符串 |
//GetFileName()方法
string Str1=@"C:\Users\Administrator\Desktop\测试文件.txt";
Console.WriteLine(Path.GetFileName(Str1));//输出:测试文件.txt
Console.ReadKey();
//GetFileNameWithoutExtension()方法
string Str1=@"C:\Users\Administrator\Desktop\测试文件.txt";
Console.WriteLine(Path.GetFileNameWithoutExtension(Str1));//输出:测试文件
Console.ReadKey();
//GetExtension()方法
string Str1=@"C:\Users\Administrator\Desktop\测试文件.txt";
Console.WriteLine(Path.GetExtension(Str1));//输出:.txt
Console.ReadKey();
//GetDirectoryName()方法
string Str1=@"C:\Users\Administrator\Desktop\测试文件.txt";
Console.WriteLine(Path.GetDirectoryName(Str1));//输出:C:\Users\Administrator\Desktop
Console.ReadKey();
//GetFullPath()方法
string Str1=@"C:\Users\Administrator\Desktop\测试文件.txt";
Console.WriteLine(Path.GetFullPath(Str1));//输出:C:\Users\Administrator\Desktop\测试文件.txt
Console.ReadKey();
//Combine()方法
string Str1=@"C:\Users\Administrator\";
string Str2=@"Desktop\测试文件.txt";
Console.WriteLine(Path.Combine(Str1,Str2));//输出:C:\Users\Administrator\Desktop\测试文件.txt
Console.ReadKey();
2.编码
文本文件有着不同的存储方式,将字符串以什么样的形式保存为二进制,这个就是编码,编码的方式有ASCII,UTF-8,Unicode,gbk等
3.File类
- 概念:
1.C#中对文件的操作
2.在C#中关于文件的操作都在命名空间System.IO下
3.File类是一个静态类
using System.IO;
- File类的基本操作:
File.Create(@"文件路径") | 在指定路径中创建或覆盖一个文件,如果指定路径下已经有此文件,那么原有的会被覆盖 |
File.Delete(@"文件路径") | 根据指定路径删除一个文件,此删除是彻底删除,回收站也没有。 |
File.Copy("被复制文件路径","新文件路径") | 根据指定路径复制一个文件 |
File.Move("被剪切文件路径","新文件路径") | 将指定的文件移到新位置(等于剪切一个文件到新的地方) |
File.ReadAllBytes(@"文件路径") | 读取一个文件内容,返回的是这个文件内容的字节数组. |
File.ReadAllLines(@"文件路径",指定的编码格式) | 读取一个文件的所有行,返回包含文件所有行的字符串数组 |
File.ReadAllText(@"文件路径",指定的编码格式) | 读取一个文件的所有行,返回包含文件所有行的字符串 |
File.WriteAllBytes(@"文件路径",指定的字节数组) | 在指定路径中创建一个文件,在其中写入指定的字节数组,如果此文件存在,那么原有的会被覆盖 |
File.WriteAllLines(@"文件路径",指定的字符串数组) | 在指定路径中创建一个文件,在其中写入指定的字符串数组 |
File.WriteAllText(@"文件路径",指定的字符串) | 在指定路径中创建一个文件,在其中写入指定的字符串 |
//File.Create()的方法
static void Main(string[] args)
{
File.Create(@"C:\Users\Administrator\Desktop\1.txt");
}
//File.Delete()的方法
static void Main(string[] args)
{
File.Delete(@"C:\Users\Administrator\Desktop\1.txt");
}
//File.Copy()的用法
static void Main(string[] args)
{
File.Copy(@"C:\Users\Administrator\Desktop\debug.log",
@"C:\Users\Administrator\Desktop\newDebug.log");
}
//File.Move()的用法
static void Main(string[] args)
{
File.Move(@"C:\Users\Administrator\Desktop\debug.log",
@"C:\Users\Administrator\Desktop\newDebug.log");
}
//File.ReadAllBytes()的用法
static void Main(string[] args)
{
// 以二进制字节数组的形式给读出来
byte[] buffer = File.ReadAllBytes(@"C:\Users\Administrator\Desktop\1.txt");
// 使用下边方法把二进制字节数组转为字符串,我们才能看到真正的内容
// 下边Encoding后边是一个编码格式,默认使用UTF8即可
string str = Encoding.UTF8.GetString(buffer);
Console.WriteLine(str);
Console.ReadKey();
}
//File.ReadAllLines()的用法
static void Main(string[] args)
{
string[] str = File.ReadAllLines(@"C:\Users\Administrator\Desktop\1.txt",
Encoding.UTF8);
for (int i = 0; i < str.Length; i++)
{
Console.WriteLine(str[i]);
}
Console.ReadKey();
}
//File.ReadAllText()的用法
static void Main(string[] args)
{
string str = File.ReadAllText(@"C:\Users\Administrator\Desktop\1.txt",
Encoding.UTF8);
Console.WriteLine(str);
Console.ReadKey();
}
//File.WriteAllBytes()的用法
static void Main(string[] args)
{
string str = "今天天气很好";
//将字符串转化为字符数组
byte[] buffer = Encoding.UTF8.GetBytes(str);
File.WriteAllBytes(@"C:\Users\Administrator\Desktop\2.txt",buffer);
}
//File.WriteAllLines()的用法
static void Main(string[] args)
{
File.WriteAllLines(@"C:\Users\Administrator\Desktop\2.txt",new string[]
{"aoe","ade"});
}
//File.WriteAllText()的用法
static void Main(string[] args)
{
File.WriteAllLines(@"C:\Users\Administrator\Desktop\2.txt","今天天气好好哎!");
}
注:File类只能对小文件有作用,对于大文件需要用到文件流
4.文件流
- 概念:
与file类相比较,文件流对系统的负荷比较轻松,就好比一缸水,文件流是用盆一盆一盆的将缸子里的水移出,而file类是将缸子抬起来将水倒出。文件流主要用到FileStream、StreamRead和StreamWrite这两类操作。
4.1.FileStream
- 概念:
1.FileStream是非静态类,需要创建对象使用,而且需要手动输入命名空间。
2.FileStream是对字节进行操作,这个使用范围更广,不仅可以对文本文件操作,还可以对多媒体文件进行操作。
3.对文件操作完成后,需要我们手动来释放文件流操作所占的资源,也可以使用using()来释放资源
- 操作:
命名空间:using System.IO;
//创建对象:
FileStream 名字 = new FileStream(@"路径",打开文件的方式,对文件的操作);
//读操作
名字.Read(字节数组,从哪开始,一次性所读取字节数组的最大长度)
//写操作
名字.Write(字节数组,从哪开始,一次性所读取字节数组的最大长度)
//关闭流
名字.Close();
//释放流所占用的空间
名字.Dispose();
//读取文件
FileStream fr = new FileStream(@"C:\Users\hp\Desktop\new.txt", FileMode.OpenOrCreate,FileAccess.Read);
//创建字节数组
byte[] buffer = new byte[1024 * 1024 * 2];
//当读取的字节数小于数组的最大长度,返回本次实际读取到的有效字节数
int r = fr.Read(buffer,0,buffer.length);
//将字节数组中每一个元素按照指定的编码格式解码成字符串
string s = Encoding.Default.GetString(buffer,0,r);
//关闭流
fr.Close();
//释放流所占的资源
fr.Dispose();
//写入文件
using(FileStream fw = new FileStream(@"C:\Users\hp\Desktop\new.txt", FileMode.OpenOrCreate,FileAccess.Write))
{
string str = "今天天气好好哎";
//将字符串转换成字节数组
byte[] buffer = Encoding.Default.GetBytes(str);
fw.Write(buffer,0,buffer.length);
}
Console.WriteLine("OK");
Console.ReadKey();
//多媒体文件的复制
string source = @"C:\Users\hp\Desktop\1.wmv";
string target = @"C:\Users\hp\Desktop\new.txt";
//创建一个读取的流
using(FileStream fr = new FileStream(source, FileMode.Open,FileAccess.Read))
{
//创建一个写入的流
using(FileStream fw = new FileStream(target, FileMode.OpenOrCreate,FileAccess.Write))
{
byte[] buffer = new byte[1024 * 1024 * 5];
//多媒体文件内存比较大,我们可以用循环去读取
while(true)
{
//返回本次实际读取到的有效字节数
int r = fr.Read(buffer,0,buffer.length);
//如果最后返回一个0,也就意味着什么也没有读到
if(r == 0)
{
break;
}
fw.Write(buffer,0,r);
}
}
}
4.2 StreamReader和StreamWriter
- 概念:
StreamReader和StreamWriter是非静态类,需要创建对象使用,而且需要手动输入命名空间。
StreamReader(文件地址,编码格式) | 读取文件 |
StreamWriter(文件地址,是否追加,编码格式) | 写入文件 |
//StreamReader的用法
using (StreamReader sr = new StreamReader("StreamWriter.txt", Encoding.Default))
{
while(!sr.EndOfStream)//判断是否到文件的结尾
{
Console.WriteLine(sr.ReadLine());
//ReadLine()只能读取一行字符串,要想把文件全部读取,需要借用循环
}
}
//StreamWriter的用法
using (StreamReader sw = new StreamWriter("StreamWriter.txt"))
{
sw.Write("今天天气好晴朗!");
}