path类专门用來操作路径的
string str = @"C:\Users\H0772690\source\老趙.txt";
获得文件名
Console.WriteLine(Path.GetFileName(str));//老趙.txt
获得文件名但是不包括拓展名
Console.WriteLine(Path.GetFileNameWithoutExtension(str));//老趙
获得全路径
Console.WriteLine(Path.GetFullPath(str));//C:\Users\H0772690\source\老趙.txt
获得路径但是不包括文件名
Console.WriteLine(Path.GetDirectoryName(str));//C:\Users\H0772690\source
获得文件拓展名
Console.WriteLine(Path.GetExtension(str));//.txt
拼接字符串作为路径
Console.WriteLine(Path.Combine(@"C:\a\",@"b.txt")); //C:\a\b.txt
操作文件
指定路径创建一个指定名称的文件
File.Create(@"C:\Users\H0772690\Desktop\new.txt");
Console.WriteLine("創建成功");
删除指定的路径下的文件
File.Delete(@"C:\Users\H0772690\Desktop\new.txt");
Console.WriteLine("刪除成功");
复制指定的路径下的文件,给一个指定的路径以及名称
File.Copy(@"C:\Users\H0772690\Desktop\new.txt", @"C:\Users\H0772690\Desktop\news.txt");
Console.WriteLine("複製成功");
编码简介: ASC 128 ASCII 256
GB2312 简体字 Big5 繁体字
unicode 解析起来慢
现在用UTF-8 web 编码:将字符串以怎样的形式保存为二进制
乱码: 产生乱码的原因:就是你打开保存这个文件所采用的编码,和你打开这个文件所采用的编码格式不一样。
File读取文件数据变成一个字符串输出 UTF-8 GB2321(简体)GBK(简繁体都有) ASCII Unicode(utf全体集) Default(获取本机的编码) 一般的是下边的方法: File.ReadAllBytes
var str = File.ReadAllBytes(@"C:\Users\H0772690\Desktop\news.txt");
string s = Encoding.Default.GetString(str);
Console.WriteLine(s);
但是GB2321,GBK这样写:
var str = File.ReadAllBytes(@"C:\Users\H0772690\Desktop\news.txt");
string s = Encoding.GetEncoding("GBK").GetString(str);
Console.WriteLine(s);
File.ReadAllLines用法,返回的是一个数组
string[] str = File.ReadAllLines(@"C:\Users\H0772690\Desktop\new.txt",Encoding.Default);
foreach (string item in str)
{
Console.WriteLine(item);
}
File.ReadAllText用法,返回的是一个字符串
string hh = File.ReadAllText(@"C:\Users\H0772690\Desktop\new.txt", Encoding.Default);
Console.WriteLine(hh);
总结:ReadAllLines和File.ReadAllText都能用于对文本文档的读取,只是看看需要到哪个返回的类型,需要对内容进行修改就得用ReadAllLines,如果说对视频音频的读取只能用File.ReadAllBytes File写文件数据
string str = "你好啊幹啥呢?";
byte[] buff = Encoding.Default.GetBytes(str);//必须string转化成byte类型
File.WriteAllBytes(@"C:\Users\H0772690\Desktop\newnew.txt",buff);
File.WriteAllLines数组类型的写进去
File.WriteAllLines(@"C:\Users\H0772690\Desktop\new.txt",new string[] {"你好啊我是小鸟!!!!!!"});
File.WriteAllText写进去就会把原来的覆盖了
File.WriteAllText(@"C:\Users\H0772690\Desktop\new.txt","哈哈哈哈");
File只能读写小文件因为他读写都是一次性完成所有导致他不能读写大文件。所以读写大文件只能用到文件流。
FilStream 操作字节文件 StreamReader和StreamWriter 操作字符
FileStream fsRead = new FileStream(@"C:\Users\H0772690\Desktop\news.txt",FileMode.OpenOrCreate,FileAccess.Read);
byte[] buffer = new byte[1024*1024*5];
//返回本次实际读取到的字节
int r = fsRead.Read(buffer,0,buffer.Length);
//将字节数组中的每一个元素按照指定的编码格式解码成字符串
string s = Encoding.Default.GetString(buffer,0,r);
//关闭流,文件流就是少数不能被GC(垃圾回收机制)回收的资源
fsRead.Close();
//释放流所占用的资源
fsRead.Dispose();
Console.WriteLine(s);
详解:
FileStream fsRead = new FileStream(@"C:\Users\H0772690\Desktop\news.txt",FileMode.OpenOrCreate,FileAccess.Read);
有三个参数,1.是文件路径2.是指定系统打开文件这个是打开没有就创建,3.对于文件怎么操作读写
Encoding.Default.GetString(buffer,0,r);
解码三个参数,1.解码的目标2.从0开始3.实际长度
使用StreamReader和StreamWriter 操作字符
using (StreamReader sr=new StreamReader(@"C:\Users\H0772690\Desktop\news.txt",Encoding.Default))
{
while (!sr.EndOfStream)
{
//!sr.EndOfStream如果不在输出流结尾就一直输出 Console.WriteLine(sr.ReadLine());
}
}
StreamWriter
using (StreamWriter sw=new StreamWriter(@"C:\Users\H0772690\Desktop\newsnew.txt"))
{
sw.Write("今天天氣真不錯!!!");
}
Console.WriteLine("okok");
注意:写入的时候会覆盖原来的,在参数增加一个ture就是追加数据就不是覆盖了 将创建文件流对象的过程写在using当中,会自动帮助我们释放流所占的资源。 从前到后覆盖了旧的数据,和读的道理一样,只是写到using里不用自己手动释放
using (FileStream fsRead = new FileStream(@"C:\Users\H0772690\Desktop\news.txt", FileMode.OpenOrCreate, FileAccess.Write))
{
string str = "看看你幹嘛呢";
byte[] buffer = Encoding.Default.GetBytes(str);
fsRead.Write(buffer,0,buffer.Length);
}
Console.WriteLine("ok");
使用FileStream实现多媒体文件的复制 写一个方法在主方法里调用
public static void CopyFile(string source,string target) {
//我们创建一个负责读取的流
using (FileStream fsRead =new FileStream(source,FileMode.OpenOrCreate,FileAccess.Read))
{
//我们创建一个负责写入的流
using (FileStream fsWrite =new FileStream(target,FileMode.OpenOrCreate,FileAccess.Write))
{
byte[] buffer = new byte[1024*1024*5];//5M
//因为文件可能比较大,所以我们在读取的时候需要一个循环去读
while (true)
{
//返回本次读取实际读取到的字节数
int r = fsRead.Read(buffer,0,buffer.Length);
//如果返回一个0,也就意味什么都没取到
if (r == 0)
{
break;
}
fsWrite.Write(buffer,0,r);
}
}
}
}
調用
string source = @"C:\Users\H0772690\Desktop\夜曲.flac";
string target = @"C:\Users\H0772690\Desktop\new夜曲.flac";
CopyFile(source,target);
Console.WriteLine("ok");