前言
文件管理在编程语言的学习中也是非常重要的,今天就来简单讲一下C#中的文件管理。
在本文中主要介绍以下内容:
- File类
- FileStream类
- StreamReader和StreamWriter
- Fileinfo类
- DirectoryInfo类
声明:本文仅对上述内容进行简单的介绍,深入学习请查看C#文档。
绝对路径和相对路径
在学习文件管理之前需要了解绝对路径和相对路径的概念。
- 绝对路径是指文件在硬盘上真正存在的路径。
- 相对路径是相对于运行程序所在的路径,因为运行程序知道自己在什么位置。
例子:
绝对路径:
D:\TestFile \\这是一个绝对路径,表示了在D盘下TestFile文件夹的内容
E:\TestFile\Text.txt \\这是一个绝对路径,表示了在E盘下TestFile文件夹下的Text.txt文件
相对路径:
假设程序的位置为:
D:\Test\Test2\project_File.exe
当该程序源代码中出现:
\Test3\text.txt \\那么这个路径是个相对路径,路径中没有准确描述盘符位置。
\\它的绝对路径是:D:\Test\Test2\Test3\text.txt
拓展:
- “..\”代表上一级
- “.\”代表本级,和使用“\”是同样的效果。
1.File类
使用File类之前需要导入命名空间:
using System.IO;
一些常用的File类方法:
创建文件
File.Create(path);//path表示文件路径
在C#中一般用字符串来表示文件路径,如:
string path1 = "X:\\TestFile\\TestText.txt"
string path2 = @"X:\TestFile\TestText.txt"
string path3 = @"\TestFile\Text.txt"
因为在编程语言中大多转义字符都是以'\字母'的形式表示的,所以在字符串中要用'\'表示''。除此之外,C#还可以在字符串前加'@'来表示这个字符串为路径,就不需要用'\'来表示'\’,提高了文件阅读性。
删除文件
File.Delete(path);
读取文件内容
读取文件内容的方法有很多,如ReadAllText,ReadAllLines,ReadAllBytes...,这里将简单说ReadAllText,其他方法与这个大多相同,其他方法具体使用请查看文档。
File.ReadAllText(path);\\读取文件的全部内容
File.ReadAllText(path,Encoding.UTF8);\\以UTF8的编译方式读取文件的全部内容
拓展:使用Encoding类需要导入命名空间using System.Text;在本文涉及的文件管理类中,基本都包含含有Encoding参数的方法。
向文件写入数据
File.WriteAllText(path,content);//将content写入文件中
这种方式会导致对之前文件里数据的覆盖,需要注意。
追加文件内容
File.AppendAllText(path, content);//从光标位置开始追加数据
复制
File.Copy(sourcePath,targetPath);//将源路径文件复制到目标路径
剪切
File.Move(sourcePath,targetPath);//将源路径文件移动到目标路径
文件是否存在
File.Exists(path);//判断文件是否存在,返回值类型为boolean
2.FileStream类
FileStream 类主要用于文件的读写,不仅能读写普通的文本文件,还可以读取图像文件、声音文件等不同格式的文件。
区别于File类的是它对文件可进行分步读写,减小内存压力。
缺点是我们需要手动的关闭和释放资源,
创建一个文件流:
//创建文件一般需要说明文件流的模式,例子中的文件模式为OpenOrCreate
FileStream filestream = new FileStream(path, FileMode.OpenOrCreate);
文件流一般通过byte数组文件数据进行操作,所以读写一般都要进行转码。
读取数据
byte[] data = new byte[filestream.Length];//用于存储文件数据的byte数组
while (true)
{
//读取数据,把数据放到data,数据的下标从0到数据末尾(data.Length)
int length = filestream.Read(data,0,data.Length);
if (length == 0)
{
Console.WriteLine("文件读取完毕");
break;
}
}
//显示数据内容,因为是byte数组,所以需要用UTF8的方式转译数据内容
Console.WriteLine(Encoding.UTF8.GetString(data));
写入数据
//writedata是带有数据的byte数组,
//第二个参数是从那个下标开始写入,第三个参数表示写入的数据长度
filestream.Write(writedata, 0, writedata.Length);
关闭数据流
filestream.Close();
其他方法请参考文档。
3.StreamReader和StreamWriter
看名字就知道,这两个类一个表示读一个表示写
直接上代码:
string path = @"D:\TestFile\TestText.txt"; //文件路径
StreamReader streamReader = new StreamReader(path);//创建一个新的读取流
//ReadToEnd方法表示读取全文,返回值类型是string
Console.WriteLine(streamReader.ReadToEnd());
streamReader.Close();//关闭这个流
//写入流
string text = "随便写入一些数据";//这是要写入的数据
在构造写入流时需要注意:第二个参数表示写入的模式为追加还是写入,如果不写第二个参数默认认为是写入,会覆盖之前文件文件里的数据。如果添加第二个参数,且为true,那么写入的数据会追加在之前文件数据的后面。
//true追加,false不追加(默认为false)
StreamWriter streamWrite = new StreamWriter(path, true);
streamWrite.WriteLine(text);
streamWrite.Close();
4.FileInfo类
这个类主要时用于查看文件相关信息,也可以用来创建和删除文件
在使用这个类时,大多使用的是对象的属性,而不是方法。
声明一个FileInfo类对象
string path = @"D:\TestFile\TestText.txt";//文件路径
//声明一个FileInfo对象,参数为路径
FileInfo fileInfo = new FileInfo(path);
通过Exists属性来检测文件是否存在。
fileInfo.Exists;
创建文件
fileInfo.Create();
删除文件
fileInfo.Delete();
下面代码中列出的是一些常用的属性
完整路径(绝对路径)
fileInfo.FullName;
文件创建时间
fileInfo.CreationTime;
文件是否是只读
fileInfo.IsReadOnly;
文件大小
fileInfo.Length;
文件名称
fileInfo.Name;
文件最后访问时间
fileInfo.LastAccessTime;
5.DirectoryInfo类
这个类一般用于查询目录信息(文件夹),与FileInfo类使用方式类似。
声明一个DirectoryInfo的对象
//要查询的目录路径
string path = @"D:\TestFile\newFile";
//创建一个DirectoryInfo的对象
DirectoryInfo directoryInfo = new DirectoryInfo(path);
文件夹是否存在
directoryInfo.Exists;
文件夹路径
directoryInfo.FullName;
文件夹名称
directoryInfo.Name;
示文件夹创建时间
directoryInfo.CreationTime
最后访问时间
directoryInfo.LastAccessTime;
所属盘符
directoryInfo.Root;
父文件夹路径
directoryInfo.Parent;
创建一个子文件夹
directoryInfo.CreateSubdirectory("newDirectory");
创建文件夹
directoryInfo.Create();
删除文件夹
directoryInfo.Delete();
最后
本文知识简单的说明了一些在C#中文件操作相关的类和类的使用方法,其中含有大量方法和重载方法并未提及,深入学习请参考C#文档。
文章中如有错误和遗漏,欢迎指正。