Administrator
发布于 2025-10-31 / 15 阅读
0
0

C#: FileInfo类的常见属性

属性总览表

属性名称

数据类型

读写性

说明

示例

Name

string

只读

获取文件的名称(包含扩展名)

"document.txt"

Length

long

只读

获取文件的大小(字节)

1024

IsReadOnly

bool

读写

获取或设置文件是否只读

true / false

FullName

string

只读

获取文件的完整路径

@"C:\Files\doc.txt"

Exists

bool

只读

检查文件是否存在

true / false

DirectoryName

string

只读

获取文件所在目录的路径

@"C:\Files"

CreationTime

DateTime

读写

获取或设置文件的创建时间

2024-01-15 10:30:00

Attributes

FileAttributes

读写

获取或设置文件的属性

FileAttributes.Normal

Extension

string

只读

获取文件的扩展名

".txt"

LastWriteTime

DateTime

读写

获取或设置文件的最后修改时间

2024-01-15 14:20:00


详细讲解

1. Name - 文件名

FileInfo file = new FileInfo(@"C:\Files\document.txt");
Console.WriteLine(file.Name); // 输出: document.txt
  • 只包含文件名和扩展名,不包含路径

  • 常用于显示文件名给用户

2. Length - 文件大小

FileInfo file = new FileInfo("test.txt");
Console.WriteLine($"文件大小: {file.Length} 字节");
Console.WriteLine($"约 {file.Length / 1024} KB");
  • 返回文件的字节数

  • 文件不存在时会抛出异常,使用前要检查 Exists

3. IsReadOnly - 只读属性

FileInfo file = new FileInfo("readme.txt");
// 检查是否只读
if (file.IsReadOnly)
{
    Console.WriteLine("文件是只读的");
}
​
// 设置文件为只读
file.IsReadOnly = true;
  • 可以读取和设置

  • 设置为 true 时文件不能被修改

4. FullName - 完整路径

FileInfo file = new FileInfo("data.txt");
Console.WriteLine(file.FullName); 
// 输出完整路径,如: C:\Projects\data.txt
  • 包含完整路径和文件名

  • 适合用于需要完整路径的场景

5. Exists - 存在性检查

FileInfo file = new FileInfo("somefile.txt");
if (file.Exists)
{
    Console.WriteLine("文件存在");
    Console.WriteLine($"大小: {file.Length}");
}
else
{
    Console.WriteLine("文件不存在");
}
  • 重要:在访问其他属性前先检查此属性

  • 避免文件不存在时出现异常

6. DirectoryName - 目录路径

FileInfo file = new FileInfo(@"C:\Users\Tom\file.txt");
Console.WriteLine(file.DirectoryName); // 输出: C:\Users\Tom
  • 只返回目录路径,不包含文件名

  • Name 属性配合使用

7. CreationTime - 创建时间

FileInfo file = new FileInfo("log.txt");
// 读取创建时间
Console.WriteLine($"创建时间: {file.CreationTime}");
​
// 设置创建时间
file.CreationTime = new DateTime(2024, 1, 1, 10, 0, 0);
  • 可以读取和设置

  • 设置时间需要适当的权限

8. Attributes - 文件属性

FileInfo file = new FileInfo("config.ini");
// 读取属性
Console.WriteLine($"当前属性: {file.Attributes}");
​
// 设置为普通文件(可写)
file.Attributes = FileAttributes.Normal;
​
// 设置为隐藏文件
file.Attributes = FileAttributes.Hidden;
  • FileAttributes 是枚举类型

  • 常用值:Normal, ReadOnly, Hidden, Archive

9. Extension - 文件扩展名

FileInfo file1 = new FileInfo("photo.jpg");
FileInfo file2 = new FileInfo("document");
FileInfo file3 = new FileInfo("backup.");
​
Console.WriteLine(file1.Extension); // 输出: .jpg
Console.WriteLine(file2.Extension); // 输出: 空字符串
Console.WriteLine(file3.Extension); // 输出: .
  • 总是包含点号(.)

  • 没有扩展名时返回空字符串

10. LastWriteTime - 最后修改时间 ⭐(新增)

FileInfo file = new FileInfo("data.txt");
// 读取最后修改时间
Console.WriteLine($"最后修改: {file.LastWriteTime}");
​
// 设置最后修改时间
file.LastWriteTime = DateTime.Now;
​
// 比较创建时间和修改时间
if (file.CreationTime == file.LastWriteTime)
{
    Console.WriteLine("文件创建后未被修改");
}
else
{
    Console.WriteLine("文件已被修改过");
}
  • 记录文件内容最后一次被修改的时间

  • 常用于判断文件是否需要备份或同步


综合示例

using System;
using System.IO;
​
class Program
{
    static void Main()
    {
        FileInfo file = new FileInfo(@"C:\Test\example.txt");
        
        Console.WriteLine("=== 文件信息报告 ===");
        Console.WriteLine($"文件名: {file.Name}");
        Console.WriteLine($"扩展名: {file.Extension}");
        Console.WriteLine($"完整路径: {file.FullName}");
        Console.WriteLine($"所在目录: {file.DirectoryName}");
        
        if (file.Exists)
        {
            Console.WriteLine($"文件大小: {file.Length} 字节");
            Console.WriteLine($"是否只读: {file.IsReadOnly}");
            Console.WriteLine($"创建时间: {file.CreationTime}");
            Console.WriteLine($"修改时间: {file.LastWriteTime}");
            Console.WriteLine($"文件属性: {file.Attributes}");
        }
        else
        {
            Console.WriteLine("⚠️ 文件不存在");
        }
    }
}

注意事项

  1. 先检查 Exists:访问其他属性前先检查文件是否存在

  2. 理解只读属性Name, FullName 等不能修改

  3. 注意异常处理:文件不存在时会抛出异常

练习题

根据以上10个属性,设计的5道简单的练习题,只使用FileInfo类的属性,不涉及复杂的方法调用,适合初学者巩固对FileInfo属性的理解!

练习题1:单个文件信息查看器

要求:创建一个程序,让用户输入文件路径,显示该文件的所有基本信息:

  • 文件名(Name)

  • 文件大小(Length)

  • 是否只读(IsReadOnly)

  • 完整路径(FullName)

  • 是否存在(Exists)

  • 所在目录(DirectoryName)

  • 创建时间(CreationTime)

  • 文件属性(Attributes)

  • 扩展名(Extension)

示例输出

文件名: test.txt
文件大小: 1024 字节
是否只读: False
完整路径: C:\test.txt
是否存在: True
所在目录: C:\
创建时间: 2024-01-15 10:30:00
文件属性: Archive
扩展名: .txt

练习题2:文件状态检查器

要求:检查指定文件的状态并给出简单报告:

  1. 使用 Exists 检查文件是否存在

  2. 如果存在,使用 IsReadOnlyAttributes 判断文件状态

  3. 使用 Length 显示文件大小

  4. 使用 CreationTime 显示文件年龄

提示:如果文件不存在,显示"文件不存在";如果存在,显示详细状态。

练习题3:只读属性切换器

要求:创建一个程序,可以切换文件的只读状态:

  1. 使用 Exists 检查文件是否存在

  2. 显示当前的 IsReadOnly 状态

  3. 切换只读状态(如果只读就改为可写,如果可写就改为只读)

  4. 显示切换后的 IsReadOnly 状态和 Attributes

练习题4:文件基本信息对比

要求:比较两个文件的基本信息:

  • 使用 NameExtension 比较文件名和类型

  • 使用 Length 比较文件大小

  • 使用 CreationTime 比较创建时间

  • 使用 IsReadOnly 比较只读状态

输出示例

文件1比文件2大:是
文件类型相同:是
文件1创建时间更早:否
都是只读文件:否

练习题5:文件属性分析器

要求:分析一个文件的属性并给出简单描述:

  1. 使用 Exists 验证文件存在

  2. 使用 Extension 判断文件类型(.txt=文本文件,.jpg=图片等)

  3. 使用 Length 判断文件大小级别(小文件<1MB,中文件1-10MB,大文件>10MB)

  4. 使用 IsReadOnlyAttributes 描述文件保护状态

  5. 使用 CreationTime 判断文件新旧程度

示例输出

这是一个文本文件(.txt)
属于小文件(256 字节)
文件可读写
创建于3天前

参考答案模板(练习题1示例)

using System;
using System.IO;
​
class Program
{
    static void Main()
    {
        Console.Write("请输入文件路径: ");
        string filePath = Console.ReadLine();
        
        FileInfo file = new FileInfo(filePath);
        
        Console.WriteLine("=== 文件信息 ===");
        Console.WriteLine($"文件名: {file.Name}");
        Console.WriteLine($"扩展名: {file.Extension}");
        
        if (file.Exists)
        {
            Console.WriteLine($"文件大小: {file.Length} 字节");
            Console.WriteLine($"是否只读: {file.IsReadOnly}");
            Console.WriteLine($"完整路径: {file.FullName}");
            Console.WriteLine($"所在目录: {file.DirectoryName}");
            Console.WriteLine($"创建时间: {file.CreationTime}");
            Console.WriteLine($"文件属性: {file.Attributes}");
            Console.WriteLine($"是否存在: {file.Exists}");
        }
        else
        {
            Console.WriteLine("文件不存在!");
        }
    }
}

练习题2答案:文件状态检查器

using System;
using System.IO;
​
class Program
{
    static void Main()
    {
        Console.Write("请输入文件路径: ");
        string filePath = Console.ReadLine();
        
        FileInfo file = new FileInfo(filePath);
        
        Console.WriteLine("=== 文件状态报告 ===");
        
        // 检查文件是否存在
        if (!file.Exists)
        {
            Console.WriteLine("❌ 文件不存在");
            return;
        }
        
        Console.WriteLine("✅ 文件存在");
        
        // 文件大小信息
        Console.WriteLine($"📁 文件大小: {file.Length} 字节");
        if (file.Length < 1024)
        {
            Console.WriteLine("   大小分类: 小文件");
        }
        else if (file.Length < 1024 * 1024)
        {
            Console.WriteLine("   大小分类: 中等文件");
        }
        else
        {
            Console.WriteLine("   大小分类: 大文件");
        }
        
        // 只读状态
        if (file.IsReadOnly)
        {
            Console.WriteLine("🔒 文件状态: 只读文件");
        }
        else
        {
            Console.WriteLine("✏️  文件状态: 可写文件");
        }
        
        // 文件属性
        Console.WriteLine($"🏷️  文件属性: {file.Attributes}");
        
        // 文件年龄
        DateTime now = DateTime.Now;
        TimeSpan age = now - file.CreationTime;
        Console.WriteLine($"📅 文件年龄: {age.Days} 天 {age.Hours} 小时");
        Console.WriteLine($"⏰ 创建时间: {file.CreationTime}");
    }
}

练习题3答案:只读属性切换器

using System;
using System.IO;
​
class Program
{
    static void Main()
    {
        Console.Write("请输入文件路径: ");
        string filePath = Console.ReadLine();
        
        FileInfo file = new FileInfo(filePath);
        
        // 检查文件是否存在
        if (!file.Exists)
        {
            Console.WriteLine("文件不存在!");
            return;
        }
        
        Console.WriteLine("=== 只读属性切换器 ===");
        
        // 显示当前状态
        Console.WriteLine($"当前只读状态: {file.IsReadOnly}");
        Console.WriteLine($"当前文件属性: {file.Attributes}");
        
        // 切换只读状态
        if (file.IsReadOnly)
        {
            // 从只读改为可写
            file.IsReadOnly = false;
            Console.WriteLine("✅ 已从只读改为可写");
        }
        else
        {
            // 从可写改为只读
            file.IsReadOnly = true;
            Console.WriteLine("✅ 已从可写改为只读");
        }
        
        // 显示切换后状态
        Console.WriteLine($"切换后只读状态: {file.IsReadOnly}");
        Console.WriteLine($"切换后文件属性: {file.Attributes}");
        
        // 验证切换是否成功
        FileInfo checkFile = new FileInfo(filePath);
        Console.WriteLine($"验证只读状态: {checkFile.IsReadOnly}");
    }
}

练习题4答案:文件基本信息对比

using System;
using System.IO;
​
class Program
{
    static void Main()
    {
        Console.Write("请输入第一个文件路径: ");
        string filePath1 = Console.ReadLine();
        
        Console.Write("请输入第二个文件路径: ");
        string filePath2 = Console.ReadLine();
        
        FileInfo file1 = new FileInfo(filePath1);
        FileInfo file2 = new FileInfo(filePath2);
        
        Console.WriteLine("=== 文件对比结果 ===");
        
        // 检查文件是否存在
        if (!file1.Exists || !file2.Exists)
        {
            Console.WriteLine("错误:有一个或两个文件不存在!");
            return;
        }
        
        // 比较文件大小
        bool file1Larger = file1.Length > file2.Length;
        Console.WriteLine($"文件1比文件2大: {file1Larger}");
        Console.WriteLine($"文件1大小: {file1.Length} 字节");
        Console.WriteLine($"文件2大小: {file2.Length} 字节");
        
        // 比较文件类型
        bool sameExtension = file1.Extension == file2.Extension;
        Console.WriteLine($"文件类型相同: {sameExtension}");
        Console.WriteLine($"文件1类型: {file1.Extension}");
        Console.WriteLine($"文件2类型: {file2.Extension}");
        
        // 比较文件名
        bool sameName = file1.Name == file2.Name;
        Console.WriteLine($"文件名相同: {sameName}");
        Console.WriteLine($"文件1名称: {file1.Name}");
        Console.WriteLine($"文件2名称: {file2.Name}");
        
        // 比较创建时间
        bool file1Older = file1.CreationTime < file2.CreationTime;
        Console.WriteLine($"文件1创建时间更早: {file1Older}");
        Console.WriteLine($"文件1创建时间: {file1.CreationTime}");
        Console.WriteLine($"文件2创建时间: {file2.CreationTime}");
        
        // 比较只读状态
        bool bothReadOnly = file1.IsReadOnly && file2.IsReadOnly;
        Console.WriteLine($"都是只读文件: {bothReadOnly}");
        Console.WriteLine($"文件1只读: {file1.IsReadOnly}");
        Console.WriteLine($"文件2只读: {file2.IsReadOnly}");
    }
}

练习题5答案:文件属性分析器

using System;
using System.IO;
​
class Program
{
    static void Main()
    {
        Console.Write("请输入文件路径: ");
        string filePath = Console.ReadLine();
        
        FileInfo file = new FileInfo(filePath);
        
        Console.WriteLine("=== 文件属性分析 ===");
        
        // 检查文件是否存在
        if (!file.Exists)
        {
            Console.WriteLine("❌ 文件不存在,无法分析");
            return;
        }
        
        // 分析文件类型
        string fileType = AnalyzeFileType(file.Extension);
        Console.WriteLine($"📄 文件类型: {fileType}({file.Extension})");
        
        // 分析文件大小
        string sizeCategory = AnalyzeFileSize(file.Length);
        Console.WriteLine($"📊 文件大小: {sizeCategory}({file.Length} 字节)");
        
        // 分析保护状态
        string protectionStatus = AnalyzeProtection(file.IsReadOnly, file.Attributes);
        Console.WriteLine($"🔐 保护状态: {protectionStatus}");
        
        // 分析文件新旧
        string ageStatus = AnalyzeFileAge(file.CreationTime);
        Console.WriteLine($"📅 文件新旧: {ageStatus}");
        Console.WriteLine($"⏰ 具体时间: {file.CreationTime}");
    }
    
    // 分析文件类型
    static string AnalyzeFileType(string extension)
    {
        switch (extension.ToLower())
        {
            case ".txt": return "文本文件";
            case ".jpg": case ".png": case ".gif": return "图片文件";
            case ".doc": case ".docx": return "Word文档";
            case ".pdf": return "PDF文档";
            case ".exe": return "可执行文件";
            default: return "其他文件";
        }
    }
    
    // 分析文件大小
    static string AnalyzeFileSize(long length)
    {
        if (length < 1024) // 小于1KB
            return "很小";
        else if (length < 1024 * 1024) // 小于1MB
            return "小文件";
        else if (length < 1024 * 1024 * 10) // 小于10MB
            return "中等文件";
        else
            return "大文件";
    }
    
    // 分析保护状态
    static string AnalyzeProtection(bool isReadOnly, FileAttributes attributes)
    {
        if (isReadOnly)
            return "受保护(只读)";
        else
            return "可读写";
    }
    
    // 分析文件新旧
    static string AnalyzeFileAge(DateTime creationTime)
    {
        TimeSpan age = DateTime.Now - creationTime;
        
        if (age.Days == 0)
            return "今天创建";
        else if (age.Days < 7)
            return "近期创建";
        else if (age.Days < 30)
            return "较新文件";
        else if (age.Days < 365)
            return "普通文件";
        else
            return "旧文件";
    }
}


评论