ZetCode

C# FileInfo

上次修改时间:2025 年 5 月 18 日

在本文中,我们将探讨 FileInfo 如何促进 C# 中的文件管理。

理解 FileInfo

FileInfo 类提供了一系列属性和实例方法来处理文件,包括创建、复制、删除、移动和打开操作。 它还支持 FileStream 对象的初始化,从而实现高效的文件访问和操作。

.NET 还包括 File 类,它的用途相似,但在功能上有所不同。 虽然 FileInfo 表示一个特定的文件实例并支持详细的文件操作,但 File 是一个静态实用程序类,它提供了方便的方法来处理文件,而无需对象实例。

当您需要检索文件元数据、对文件执行多个操作或通过减少冗余安全检查来优化性能时,使用 FileInfo 是有益的。 另一方面,File 非常适合不需要持久文件对象的简单文件操作。

words.txt
sky
borrow
war
ocean
cup
cloud
water
read
book
look

在几个例子中,我们使用了这个文本文件。

C# FileInfo 简单示例

我们有一个使用 FileInfo 的简单示例。

Program.cs
var fi = new FileInfo("words.txt");

Console.WriteLine(fi.Name);
Console.WriteLine(fi.FullName);

bool ro = fi.IsReadOnly;

if (ro)
{
    Console.WriteLine("readonly file");
}
else
{
    Console.WriteLine("not a readonly file");
}

我们创建一个 FileInfo 对象,将一个文本文件传递给它的构造函数。 然后我们打印它的三个属性。

Console.WriteLine(fi.Name);
Console.WriteLine(fi.FullName);

我们打印它的名称和完整名称。

bool ro = fi.IsReadOnly;

if (ro)
{
    Console.WriteLine("readonly file");
}
else
{
    Console.WriteLine("not a readonly file");
}

我们确定文件是否为只读。

$ dotnet run
words.txt
/home/jano/Documents/prog/csharp/fileinfo/First/words.txt
not a readonly file

C# FileInfo 创建文本文件

CreateText 方法创建一个 StreamWriter,用于写入新的文本文件。

Program.cs
var fi = new FileInfo("colours.txt");

using StreamWriter sw = fi.CreateText();

sw.WriteLine("red");
sw.WriteLine("yellow");
sw.WriteLine("white");
sw.WriteLine("brown");

我们创建一个新的文本文件 colours.txt。 我们向文件中写入四行。

using StreamWriter sw = fi.CreateText();

StreamWriter 类实现了 IDisposable 接口; 因此,我们使用 using 语句来关闭资源。

C# FileInfo 读取文件

OpenText 创建一个具有 UTF8 编码的 StreamReader,它从现有的文本文件中读取内容。

Program.cs
var fi = new FileInfo("words.txt");

using StreamReader sr = fi.OpenText();
string? s = string.Empty;

while ((s = sr.ReadLine()) != null)
{
    Console.WriteLine(s);
}

在此示例中,我们逐行读取文件。

$ dotnet run
sky
borrow
war
ocean
cup
cloud
water
read
book
look

C# FileInfo 删除文件

Delete 方法删除一个文件。

Program.cs
var fi = new FileInfo("/etc/hostname");

try
{
    fi.Delete();

} catch (UnauthorizedAccessException e)
{
    Console.WriteLine("failed to delete file");
    Console.WriteLine(e.Message);
}

在此示例中,我们尝试删除一个系统文件。 由于我们没有足够的权限,因此会抛出一个异常。

$ dotnet run
failed to delete file
Access to the path '/etc/hostname' is denied.

C# FileInfo 复制文件

CopyTo 将现有文件复制到一个新文件,禁止覆盖现有文件。

Program.cs
var fi = new FileInfo("words.txt");
fi.CopyTo("words2.txt");

该示例创建了 words.txt 文件的一个副本。

C# FileInfo 目录

Directory 获取父目录的一个实例。

Program.cs
var fi = new FileInfo("/etc/hostname");
var di = fi.Directory;

Console.WriteLine(di?.FullName);
Console.WriteLine(di?.LastAccessTime);
Console.WriteLine(di?.Root);

该示例打印文件的父目录完整名称、上次访问时间和根目录。

$ dotnet run
/etc
6/30/2022 11:46:07 AM
/

C# FileInfo 重命名文件

您可以使用 FileInfoMoveTo 方法重命名文件。 此方法将文件移动到新路径,该路径可以包含一个新名称。

Program.cs
var fi = new FileInfo("words.txt");
if (fi.Exists)
{
    fi.MoveTo("words_renamed.txt");
    Console.WriteLine("File renamed to words_renamed.txt");
}
else
{
    Console.WriteLine("File does not exist.");
}

此示例检查 words.txt 是否存在,并将其重命名为 words_renamed.txt

$ dotnet run
File renamed to words_renamed.txt

C# FileInfo 检查文件是否存在

在执行文件操作之前,最好使用 Exists 属性检查文件是否存在。

Program.cs
var fi = new FileInfo("words.txt");

if (fi.Exists)
{
    Console.WriteLine("File exists.");
}
else
{
    Console.WriteLine("File does not exist.");
}

此示例根据 words.txt 是否存在打印一条消息。

$ dotnet run
File exists.

C# FileInfo 将文本附加到文件

AppendText 方法打开一个现有文件以附加文本。 如果文件不存在,它将创建一个新文件。

Program.cs
var fi = new FileInfo("words.txt");

using (StreamWriter sw = fi.AppendText())
{
    sw.WriteLine("newword");
}

Console.WriteLine("Text appended to file.");

此示例将单词 newword 附加到 words.txt

$ dotnet run
Text appended to file.

来源

FileInfo 类 - 语言参考

在本文中,我们使用 FileInfo 来处理文件。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直撰写编程文章。 迄今为止,我已经撰写了超过 1,400 篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 C# 教程