//通过指定一个文件路径来创建一个对象。
FileInfo file=new FileInfo(@"Encodings.txt");
//创建文件夹
DirectoryInfo dirInfo=new DirectoryInfo(@"c:\alin");
//获取磁盘的所有逻辑名称
stirng[] names=Directory.GetLogicalDrives();
foreach(var item in names)
{
DriveInfo driveInfo=new DriveInfo(item);
driveInfo.DriveType=DriveType.CDROM;
}
FileStream fs=File.Open();//返回FileStream
FileStream fs=File.OpenRead();
FileStream fs=File.OpenWrite();
FileStream fs=new FileStream(参数);
Stream是所有流的父类,它是个抽象类。
文件操作的类都在System.IO.*;
文件流的出现,就是为了解决大文件在网络中的传输。要分成字节流在网络中传输,这样这安全又高效。
在转在文件流时,要指定相应的编码方式。
string msg="木之林的个人网站http://www.mzlin.net 个人微信订阅号是木之林";
byte[] bytes=System.Text.Encoding.UTF-8.GetBytes(msg);//字符串转文件流
string newStr=System.Text.Encoding.UTF-8.GetString(bytes);//文件流转字符串
文件流操作的都 是字节。不能直接操作字符串。
//通过FileStream来写文件
//文件流使用步骤
//1.创建文件流
FileStream fsWrite=new FileStream("First.txt",FileMode.Create,FileAccess.Write);//指定fsWrite只能FileAccess.Write
//2,使用文件流,执行读写操作。
string msg="木之林的个人网站http://www.mzlin.net 个人微信订阅号是木之林";
byte[] bytes=System.Text.Encoding.UTF-8.GetBytes(msg);//字符串转文件流
//参数1表示将指定的字节数组中的内容写入文件,参数2是偏移量(一般从0开始),参数3是写入的字节个数;
fsWrite.Write(bytes,0,bytes.Length);
//3,清空缓冲区,关闭文件流,释放资源
//fsWrite.Flush();//程序告诉缓冲区,需要执行的要立即执行程序。
//fsWrite.Close();//断开此线程文件流连接
fsWrite.Dispose();//回收系统资源
以上方法步骤可以直接用using(需要释放的资源类){操作方法}
//读取文件流
using(FileStream fsRead=new FileStream("First.txt",FileMode.Open,FileAccess.Read) )//1.创建文件流
{
//根据文件的总字节数据 创建一个byte数组,这个一次性读取出来,大文件不能这样操作。
byte[] bytes=new byte[fsRead.Length];
//2,读取文件
fsRead.Read(bytes,0,bytes.Length);
string newStr=System.Text.Encoding.UTF-8.GetString(bytes);//文件流转字符串
}
//大文件流操作:将源文件内容读取到内存中,使用Positon属性为当前文件指针位置,每一次就要移动一下Position以备下次写到后面的位置。需要创建两个文件流来操作。
string source=@"c:\a.rmvb";
stirng target=@"d:\a.rmvb";
BigFileCopy(source,target);
Console.WriteLine("OK");
private static void BigFileCopy(string source,string target)
{
using(FileStream fsRead=new FileStream(source,FileMode.Open(),FileAccess.Read))
{
using(FileStream fsWrite=new FileStream(target,FileMode.Open(),FileAccess.Write))
{
//byte[] bytes=new byte[5242880];//创建一个缓冲区大小,根据实际情况来定
byte[] bytes=new byte[1024*1024*5];//5M缓冲区,但是这样写易读高,易于维护;
//返回值表示本次实际读取的字节个数;
int c=fsRead.Read(byte,0,bytes.Length);
while(c>0)
{
//将读取到的内容写入到新文件中
fsWrite.Write(bytes,0,c);//第3个参数应该是读取到的字节数,而不是数组的长度。
double d=(fsWrite.Position/(double)fsRead.Length)*100;
Console.WriteLine($"{d}%");
c=fsRead.Read(bytes,0,bytes.Length);
}
}
}
}