C#—文件管理

371 阅读5分钟

前言

文件管理在编程语言的学习中也是非常重要的,今天就来简单讲一下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#文档。

文章中如有错误和遗漏,欢迎指正。