Skip to content

C# FileInfo

在这里,您将学习如何使用 FileInfo 类对物理文件进行读/写操作。

FileInfo 类提供与静态 File 类相同的功能,但您可以通过手动编写代码来从文件读取或写入字节,从而更好地控制文件的读/写操作。

FileInfo 的重要属性和方法:

属性说明
Directory获取父目录的实例。
DirectoryName获取表示目录完整路径的字符串。
Exists获取一个值,该值指示文件是否存在。
Extension获取表示文件扩展名部分的字符串。
FullName获取目录或文件的完整路径。
IsReadOnly获取或设置一个值,该值确定当前文件是否为只读。
LastAccessTime获取或设置上次访问当前文件或目录的时间
LastWriteTime获取或设置当前文件或目录上次写入的时间
Length获取当前文件的大小(以字节为单位)。
Name获取文件的名称。
方法说明
AppendText创建一个 StreamWriter,它将文本附加到由 FileInfo 的此实例表示的文件。
CopyTo将现有文件复制到新文件,不允许覆盖现有文件。
Create创建文件。 返回 FileStream
CreateText创建一个写入新文本文件的 StreamWriter。
Decrypt解密当前帐户使用加密方法加密的文件。 (依赖于CSP)
Delete删除指定的文件。
Encrypt加密文件,以便只有用于加密文件的帐户才能对其进行解密。 (依赖于CSP)
MoveTo将指定文件移动到新位置,提供指定新文件名的选项。
Open在指定的 FileMode 中打开一个。
OpenRead创建一个只读的 FileStream。
OpenText使用 UTF8 编码创建一个从现有文本文件读取的 StreamReader。
OpenWrite创建一个只写的 FileStream。
Replace用当前 FileInfo 对象描述的文件替换指定文件的内容,删除原始文件,并创建替换文件的备份。
ToString以字符串形式返回路径。

以下示例显示了如何手动从文件中读取字节,然后使用 UTF8 编码将它们转换为字符串: 我们要先有一个文件abc.txt它的编码是UTF-8。

csharp
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;

namespace Malema.net
{
    class Program
    {
        static async Task Main(string[] args)
        {
            FileInfo fi = new FileInfo("abc.txt");
            FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
            // 创建一个跟文件大小一样的缓冲区 (内容大文件小可以这样搞)
            byte[] buffer = new byte[fs.Length];
            // 全部读出来,把文件的肉容放到了 buffer
            fs.Read(buffer, 0, (int)fs.Length);
            // 把所有的字节数组转成字符串
            string filestring = Encoding.UTF8.GetString(buffer);
            Console.WriteLine(filestring);
        }
    }
}

我们也可以用StreamReader来读取它

csharp
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;

namespace Malema.net
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var fi = new FileInfo("abc.txt");
            using (var fs = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
            using (var sr = new StreamReader(fs, Encoding.UTF8)) //这边也演示了编码。
            {
                string fileContent = sr.ReadToEnd();
                Console.WriteLine(fileContent);
            }
        }
    }
}

简单就是美