在这里,您将学习如何使用 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);
}
}
}
}