在这里,您将学习如何使用 FileInfo 类对物理文件进行读/写操作。
FileInfo 类提供与静态 File 类相同的功能,但您可以通过手动编写代码来从文件读取或写入字节,从而更好地控制文件的读/写操作。
属性 | 说明 |
---|---|
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。
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来读取它
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);
}
}
}
}