使用FileInfo对文件进行操作
//相对路径:就是找当前程序所在的路径
FileInfo fileInfo = new FileInfo("TextFile1.txt");
//绝对路径:加上文件完整的路径名
FileInfo fileInfo2 = new FileInfo(@"C:\Users\devsiki\Documents\Visual Studio 2012\Projects\学习")
//FileInfo常用方法
Console.WriteLine(fileInfo.Exists);//判断该文件是否存在
Console.WriteLine(fileInfo.Name);//文件名.后缀
Console.WriteLine(fileInfo.Directory);//取得文件所在路径,不包含文件名
Console.WriteLine(fileInfo.Length);//文件的大小(单位字节)
Console.WriteLine(fileInfo.IsReadOnly);//文件是否是只读的
fileInfo.Delete();//默认删除输出目录的文件
fileInfo.CopyTo("tt.txt");//复杂文件内容到指定文件
//创建文件
FileInfo fileInfo3 = new FileInfo("siki.txt");
if (fileInfo3.Exists == false)//如果当前文件不存在
{
fileInfo.Create();//创建当前文件
}
fileInfo3.MoveTo("siki2.txt");//重命名操作
使用DirectoryInfo操作文件夹
//文件夹操作(目录操作) (按照完整路径名创建)
DirectoryInfo dirInfo = new DirectoryInfo(@"C:\Users\devsiki\Documents\Visual Studio 2012\Projects\学习csharp编程 高级篇\026-文件操作-查看文件和文件夹信息\bin\Debug");//查看Debug文件夹的信息
//文件夹常用操作方法
Console.WriteLine(dirInfo.Exists);//目录是否存在
Console.WriteLine(dirInfo.Name);//文件夹的名字
Console.WriteLine(dirInfo.Parent);//当前文件目录的上一级目录名
Console.WriteLine(dirInfo.Root);//当前文件夹的根目录
Console.WriteLine(dirInfo.CreationTime);//当前文件夹的创建时间
dirInfo.CreateSubdirectory("siki");//在子文件夹创建为siki的文件夹
//创建文件夹
DirectoryInfo dirInfo = new DirectoryInfo("test");
if (dirInfo.Exists == false)
{
dirInfo.Create();//创建目录
}
注意:如果使用默认路径是生成路径,而不是项目路径,VS一般默认在Debug文件夹下,所以注意需要读取的文件位置
使用File读写文件
读取文本文件内容
//使用File类直接读取文件里面的内容
string[] strArray = File.ReadAllLines("TextFile1.txt");//读取文件,把每一个行文本读取成一个字符串,最后组成一个字符串的数组
foreach (var s in strArray)
{
Console.WriteLine(s);
}
string s = File.ReadAllText("TextFile1.txt");//直接读取成一个字符串,换行符什么的直接读取.
读取其他文件,比如图片
//其他文件基本上都是读取成字节存储的
byte[] byteArray = File.ReadAllBytes("3.LINQ.png");
foreach (var b in byteArray)
{
Console.Write(b);
}
写入文件
//写入字符串
File.WriteAllText("textfile2.txt", "hello sdf中国");
//写入字符串数组,会自动换行
File.WriteAllLines("textfile3.txt",new string[]{" sdfsdflk","213412","流口水的减肥"});
//把读取到的文件写入到另一个地方使用字节数组
byte[] data = File.ReadAllBytes("3.LINQ.png");
File.WriteAllBytes("4.png",data);
使用FileStream读写文件(字节流)
一般使用FileStream完成二进制文件的读写,比如视频和图片等
//1,创建文件流 用来操作文件,FileMode是一个枚举表示这个文件的打开方式
FileStream stream = new FileStream("TextFile1.txt",FileMode.Open);
//2, 读取或者写入数据
byte[] data = new byte[1024];//数据容器
//1 byte = 1字节 1024byte=1KB 1024KB=1MB 1024MB = 1GB 1024GB=1T
while (true)//循环读取大文件的内容
{
int length = stream.Read(data, 0, data.Length);
if (length == 0)//如果读取到文件末尾,就会返回0
{
Console.WriteLine("读取结束");
break;
}
//for (int i = 0; i < length; i++)
// {
// Console.Write(data[i] + " ");
// }
}
下面我们使用FileStream来完成一个图片的复制
FileStream readStream = new FileStream("3.LINQ.png",FileMode.Open);//创建读取的FileSrtream
FileStream writeStream = new FileStream("LINQ副本.png",FileMode.Create);//创建写入的FileStream
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);
}
}
writeStream.Close();
readStream.Close();
使用StreamReader和StreamWriter读写文本文件
读取文本文件
//创建文本文件读取流
StreamReader reader = new StreamReader("TextFile1.txt");
//按行读取
while (true)
{
string str = reader.ReadLine();//读取一行字符串,读取到末尾返回null
if (str == null) break;
Console.WriteLine(str);
}
//直接读取
string str = reader.ReadToEnd();//读取到文本的结尾(读取文本中所有的字符)
//按照字节读取
while (true)
{
int res = reader.Read();//读取字节,读取到末尾返回-1
if (res == -1)
{
break;
}
else
{
Console.Write((char)res);
}
}
reader.Close();
写入文本文件
//文本文件写入流
StreamWriter writer = new StreamWriter("textfile2.txt");//如果文件存在,那么文件会被覆盖,不存在就创建
while (true)
{
string message = Console.ReadLine();
if (message == "q")//如果输入q就会换行
break;
//writer.Write(message);//写入一个字符串
writer.WriteLine(message);//写入一个字符串并换行
}
writer.Close();