目录
文件系统
表示文件和文件夹的.NET类
文件操作
FileInfo和DirectoryInfo类
通过FileInfo和DirectoryInfo类来读取文件和文件夹属性
- 查看文件属性,创建文件,移动文件,重命名文件
- 判断路径是否存在,创建目录
- 对于FileInfo,或者DirectoryInfo进行构造的时候,如果传递了一个不存在的文件或者文件夹路径,这个时候不会出现异常,只有当你使用这个文件或者文件夹的时候才会出现问题。可以通过Exists属性判断这个文件/夹是否存在
属性列表
方法列表
实践:
FileInfo类:
using System.IO; //添加命名空间
namespace _046_查看文件属性FileInfo
{
class Program
{
static void Main(string[] args)
{
//1.相对路径:当前程序所在的路径(一般在bin/debug文件夹下)
//由于testFile.txt是放在工程下的,程序搜索不到我们创建的txt文件
//所以要把testFile的属性设置为“复制到输出目录”->"如果较新则复制"
//FileInfo fileInfo = new FileInfo("testFile.txt");
//2.绝对路径:文件完整的路径名(@不让\x被当成转义字符)
FileInfo fileInfo = new FileInfo(@"G:\233\Visual Studio\Save\UnityLearning\046_查看文件属性FileInfo\bin\Debug\testFile.txt");
Console.WriteLine(fileInfo.Exists); //判断文件是否存在
Console.WriteLine(fileInfo.Name); //文件名+后缀
Console.WriteLine(fileInfo.Length); //文件大小
Console.WriteLine(fileInfo.Directory); //文件所在路径(不包含文件名)
Console.WriteLine(fileInfo.IsReadOnly); //文件是否只读
fileInfo.CopyTo("testFile2.txt"); //复制一个新文件(若已存在则不做处理)
//fileInfo.Delete(); //删除输出路径下的文件,工程下的文件不动
//3.若一开始文件不存在
FileInfo fileInfo2 = new FileInfo("ttestFile.txt");
if (fileInfo2.Exists == false) //如果不存在则创建新文件
{
fileInfo2.Create();
}
fileInfo2.MoveTo("TTestFile.txt"); //重命名
Console.ReadKey();
}
}
}
DirectoryInfo类:
using System.IO; //添加命名空间
namespace _046_查看文件属性FileInfo
{
class Program
{
static void Main(string[] args)
{
//文件夹操作FirectoryInfo
//1.按照完整路径名创建
DirectoryInfo dirInfo = new DirectoryInfo(@"G:\233\Visual Studio\Save\UnityLearning\046_查看文件属性FileInfo\bin\Debug");
Console.WriteLine(dirInfo.Exists);
Console.WriteLine(dirInfo.Name);
Console.WriteLine(dirInfo.Parent); //父目录
Console.WriteLine(dirInfo.Root); //根目录
Console.WriteLine(dirInfo.CreationTime); //创建时间
dirInfo.CreateSubdirectory("China"); //创建子目录
//2.绝对路径
DirectoryInfo dirInfo2 = new DirectoryInfo("No1.txt");
if (dirInfo2.Exists==false)
{
dirInfo2.Create();
}
Console.ReadKey();
}
}
}
File
通过File读写文件
- 要把文本文件的属性设置为 “复制到输出目录”->"如果较新则复制"
using System.IO;
namespace _047_使用File读写文件
{
class Program
{
static void Main(string[] args)
{
//1.读取文件
//读取文件里每一行的字符串
string[] strArray = File.ReadAllLines("TextFile1.txt");
foreach (var s in strArray)
{
//Console.WriteLine(s);
}
//读取文件里的文本为一个字符串
string str = File.ReadAllText("TextFile1.txt");
//读取图像信息为字节数组
byte[] byteArray = File.ReadAllBytes("testPic.jpg");
foreach (var b in byteArray)
{
//Console.Write(b);
}
//2.写入文件
//向文件写入字符串(数组) (若文件已存在则覆盖,否则创建新文件)
File.WriteAllText("TextFile2.txt","JOJO的奇妙冒险");
File.WriteAllLines("TextFile3.txt", new string[] { "1212", "dd3f", "dfdfdf"} );
//复制图片
byte[] data = File.ReadAllBytes("testPic.jpg");
File.WriteAllBytes("testPic2.jpg", data);
Console.ReadKey();
}
}
}
流
流适合读取一些大的文件
FileStream-使用流来读写文件
using System.IO;
namespace _048_使用FileStream读写文件
{
class Program
{
static void Main(string[] args)
{
//1.创建文件流 用来操作文件(路径,操作文件方式:打开、追加、创建、覆盖等)
//一般用来读取二进制文件
FileStream stream = new FileStream("TextFile1.txt",FileMode.Open);
//2.读取或者写入数据(stream都是read和write)
byte[] data = new byte[1024]; //数据容器
while (true)
{
//(存放的数据位置,索引,最大长度)
int length = stream.Read(data, 0, data.Length);
if (length==0)
{
break;
}
for (int i = 0; i < length; i++)
{
Console.Write(data[i]+" ");
}
}
Console.ReadKey();
}
}
}
使用FileStream完成文件的复制
using System.IO;
namespace _048_使用FileStream读写文件
{
class Program
{
static void Main(string[] args)
{
FileStream readStream = new FileStream("TestPicture1.jpg",FileMode.Open);
FileStream writeStream = new FileStream("TestPicture2.jpg",FileMode.Create);
byte[] data = new byte[1024];
while (true)
{
int length = readStream.Read(data, 0, data.Length);
if (length == 0)
{
Console.WriteLine("读取结束");
break;
}
else
{
writeStream.Write(data,0,length);
}
}
//关闭流
readStream.Close();
writeStream.Close();
Console.ReadKey();
}
}
}
使用StreamReader/StreamWriter读写文本文件
我们对文本文件的读写一般使用StreamReader和StreamWriter,因为不用的文本有不同编码格式,这个StreamReader会帮我们自动处理,所以我们不需要关心文本文件的编码是什么
using System.IO;
namespace _049_使用StreamReader和StreamWriter读写文本文件
{
class Program
{
static void Main(string[] args)
{
//1.创建文本文件读取流(会检查字节码标记去欸但那个编码格式)
//可指定的编码格式 ASCII Unicode UTF7 UTF8 UTF32
StreamReader reader = new StreamReader("TextFile1.txt");
//2.使用流读取文本文件
//2.1读取一行字符串
while (true)
{
string str = reader.ReadLine();
if (str == null) break;
Console.WriteLine(str);
}
//2.2 读取到文本的结尾(读取文本中所有的字符)
string str = reader.ReadToEnd();
Console.WriteLine(str);
//2.3 读取一个字符(若空则返回-1)
while (true)
{
int res = reader.Read();
if (res == -1) break;
Console.Write((char)res);
}
reader.Close(); //关闭流
//创建文本文件写入流
//若文件存在则覆盖,反之则创建新文件
StreamWriter writer = new StreamWriter("TextFile2.txt");
while (true)
{
string str = Console.ReadLine();
if (str=="q") break;
//writer.Write(str); //写入一个字符串
writer.WriteLine(str); //同上,并换行
}
writer.Close();
Console.ReadKey();
}
}
}