属性总览表
详细讲解
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("⚠️ 文件不存在");
}
}
}注意事项
先检查 Exists:访问其他属性前先检查文件是否存在
理解只读属性:
Name,FullName等不能修改注意异常处理:文件不存在时会抛出异常
练习题
根据以上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:文件状态检查器
要求:检查指定文件的状态并给出简单报告:
使用
Exists检查文件是否存在如果存在,使用
IsReadOnly和Attributes判断文件状态使用
Length显示文件大小使用
CreationTime显示文件年龄
提示:如果文件不存在,显示"文件不存在";如果存在,显示详细状态。
练习题3:只读属性切换器
要求:创建一个程序,可以切换文件的只读状态:
使用
Exists检查文件是否存在显示当前的
IsReadOnly状态切换只读状态(如果只读就改为可写,如果可写就改为只读)
显示切换后的
IsReadOnly状态和Attributes
练习题4:文件基本信息对比
要求:比较两个文件的基本信息:
使用
Name和Extension比较文件名和类型使用
Length比较文件大小使用
CreationTime比较创建时间使用
IsReadOnly比较只读状态
输出示例:
文件1比文件2大:是
文件类型相同:是
文件1创建时间更早:否
都是只读文件:否练习题5:文件属性分析器
要求:分析一个文件的属性并给出简单描述:
使用
Exists验证文件存在使用
Extension判断文件类型(.txt=文本文件,.jpg=图片等)使用
Length判断文件大小级别(小文件<1MB,中文件1-10MB,大文件>10MB)使用
IsReadOnly和Attributes描述文件保护状态使用
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 "旧文件";
}
}