FileAttributes 枚举

本文详细介绍了.NET Framework中的FileAttributes枚举,提供了文件和目录属性的定义,包括存档、压缩、加密等特性,并解释了这些属性如何应用于文件系统。
 
.NET Framework 类库
FileAttributes 枚举

提供文件和目录的属性。

此枚举有一个 FlagsAttribute 属性,允许其成员值按位组合。

命名空间:System.IO
程序集:mscorlib(在 mscorlib.dll 中)

Visual Basic(声明)
<SerializableAttribute> _
<FlagsAttribute> _
<ComVisibleAttribute(True)> _
Public Enumeration FileAttributes
Visual Basic(用法)
Dim instance As FileAttributes
C#
[SerializableAttribute] 
[FlagsAttribute]
[ComVisibleAttribute(true)]
public enum FileAttributes
C++
[SerializableAttribute] 
[FlagsAttribute]
[ComVisibleAttribute(true)]
public enum class FileAttributes
J#
/** @attribute SerializableAttribute() */ 
/** @attribute FlagsAttribute() */
/** @attribute ComVisibleAttribute(true) */
public enum FileAttributes
JScript
SerializableAttribute 
FlagsAttribute
ComVisibleAttribute(true)
public enum FileAttributes
 成员名称说明
由 .NET Compact Framework 支持Archive文件的存档状态。应用程序使用此属性为文件加上备份或移除标记。 
由 .NET Compact Framework 支持Compressed文件已压缩。 
由 .NET Compact Framework 支持Device保留供将来使用。 
由 .NET Compact Framework 支持Directory文件为一个目录。 
由 .NET Compact Framework 支持Encrypted该文件或目录是加密的。对于文件来说,表示文件中的所有数据都是加密的。对于目录来说,表示新创建的文件和目录在默认情况下是加密的。 
由 .NET Compact Framework 支持Hidden文件是隐藏的,因此没有包括在普通的目录列表中。 
由 .NET Compact Framework 支持Normal文件正常,没有设置其他的属性。此属性仅在单独使用时有效。 
由 .NET Compact Framework 支持NotContentIndexed操作系统的内容索引服务不会创建此文件的索引。 
由 .NET Compact Framework 支持Offline文件已脱机。文件数据不能立即供使用。 
由 .NET Compact Framework 支持ReadOnly文件为只读。 
由 .NET Compact Framework 支持ReparsePoint文件包含一个重新分析点,它是一个与文件或目录关联的用户定义的数据块。 
由 .NET Compact Framework 支持SparseFile文件为稀疏文件。稀疏文件一般是数据通常为零的大文件。 
由 .NET Compact Framework 支持System文件为系统文件。文件是操作系统的一部分或由操作系统以独占方式使用。 
由 .NET Compact Framework 支持Temporary文件是临时文件。文件系统试图将所有数据保留在内存中以便更快地访问,而不是将数据刷新回大容量存储器中。不再需要临时文件时,应用程序会立即将其删除。 

有关创建文件和向文件中写入文本的示例,请参见 如何:向文件写入文本。有关从文件中读取文本的示例,请参见 如何:从文件读取文本。有关读取和写入二进制文件的示例,请参见 如何:对新建的数据文件进行读取和写入

所有这些属性都与 WinNT.h 中的属性相对应。并不是所有的属性都同时适用于文件和目录。

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

.NET Framework
受以下版本支持:2.0、1.1、1.0
.NET Compact Framework
受以下版本支持:2.0、1.0
参考
System.IO 命名空间
其他资源
文件和流 I/O
如何:从文件读取文本
如何:向文件写入文本
C# 文件操作知识点整理 1. 文件路径处理 • Environment.CurrentDirectory:获取或设置当前工作目录的完整限定路径 ```c# // 获取当前工作目录 string currentDirectory = Environment.CurrentDirectory; Console.WriteLine($"当前工作目录: {currentDirectory}"); // 输出示例: C:\Users\Username\Documents\MyProject\bin\Debug\net6.0 // 设置当前工作目录(不推荐随意更改) Environment.CurrentDirectory = @"C:\MyFolder"; ``` • 路径拼接问题:直接使用 + "\\" 拼接路径不安全,应使用 Path.Combine() ```c# // 基本用法 string path1 = Path.Combine("C:", "Users", "Documents", "file.txt"); // 结果: "C:\Users\Documents\file.txt" (Windows) // 结果: "C:/Users/Documents/file.txt" (Linux/Mac) // 与 Environment.CurrentDirectory 结合使用 string currentDir = Environment.CurrentDirectory; string filePath = Path.Combine(currentDir, "data", "config.txt"); // 自动处理路径分隔符,避免手动拼接 "\" 或 "/" // 多级目录拼接 string complexPath = Path.Combine("C:", "Program Files", "MyApp", "Data", "settings.json"); ``` 1. 文件创建与写入 • File.Create():创建或覆盖文件,返回 FileStream 对象 2. • FileStream:用于文件的字节级读写操作 • using 语句:自动释放资源,无需手动调用 Close() • Encoding.UTF8.GetBytes():将字符串转换为 UTF-8 字节编码 ```c# // 使用 Path.Combine 安全拼接当前目录和文件名,避免手动拼接路径 string filePath = Path.Combine(Environment.CurrentDirectory, "example.txt"); // 定义要写入文件的字符串内容,包含英文和中文 string content = "Hello, World!\n这是一个测试文件。"; // 使用 using 语句创建文件流,确保使用完后自动释放资源 using (FileStream fs = File.Create(filePath)) { // 将 Unicode 字符串转换为 UTF-8 字节编码格式 byte[] buffer = Encoding.UTF8.GetBytes(content); // 将字节数据从缓冲区写入到文件流中 fs.Write(buffer, 0, buffer.Length); // using 语句块结束时自动调用 Dispose 方法释放文件流资源 } // 使用 File 类的静态方法直接写入文本,自动处理编码和资源释放 File.WriteAllText(filePath, content, Encoding.UTF8); // 创建文件流对象用于追加写入模式,文件不存在则创建 using (FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write)) { // 定义要追加到文件末尾的字符串内容 string appendContent = "\n追加的内容"; // 将追加内容转换为 UTF-8 字节编码 byte[] appendBuffer = Encoding.UTF8.GetBytes(appendContent); // 将追加的字节数据写入文件流 fs.Write(appendBuffer, 0, appendBuffer.Length); } // 以只读模式打开文件,使用 using 语句确保资源正确释放 using (FileStream fs = File.OpenRead(filePath)) { // 创建与文件长度相同的字节数组作为读取缓冲区 byte[] readBuffer = new byte[fs.Length]; // 从文件流中读取数据到缓冲区,返回实际读取的字节数 fs.Read(readBuffer, 0, readBuffer.Length); // 将 UTF-8 编码的字节数据转换回字符串 string readContent = Encoding.UTF8.GetString(readBuffer); // 输出读取到的文件内容到控制台 Console.WriteLine(readContent); } ``` 3. 文件追加操作 • File.Open() 配合 FileMode.Append:以追加模式打开文件 • File.AppendText():返回 StreamWriter 对象,专门用于文本追加写入 • StreamWriter.WriteLine():写入一行文本并自动添加换行符 ```c# string filePath = Path.Combine(Environment.CurrentDirectory, "append_example.txt"); // 方法1: 使用 File.Open() 配合 FileMode.Append using (FileStream fs = File.Open(filePath, FileMode.Append)) { // 将字符串转换为字节并写入文件末尾 string content = "使用 FileStream 追加的内容\n"; byte[] buffer = Encoding.UTF8.GetBytes(content); fs.Write(buffer, 0, buffer.Length); } // 方法2: 使用 File.AppendText() 返回 StreamWriter 对象 using (StreamWriter sw = File.AppendText(filePath)) { // 使用 WriteLine 方法写入一行文本,自动添加换行符 sw.WriteLine("使用 StreamWriter 追加的第一行"); sw.WriteLine("使用 StreamWriter 追加的第二行"); sw.WriteLine($"当前时间: {DateTime.Now}"); } // 方法3: 直接使用 StreamWriter 构造函数 using (StreamWriter sw = new StreamWriter(filePath, true)) { // 第二个参数 true 表示以追加模式打开 sw.WriteLine("使用 StreamWriter 构造函数追加"); sw.WriteLine("数字: {0}", 12345); } // 验证追加结果 Console.WriteLine("文件内容:"); string allContent = File.ReadAllText(filePath); Console.WriteLine(allContent); ``` 4. 文件移动与替换File.Move() 方法 • 功能:将文件从一个位置移动到另一个位置(相当于剪切操作) • 特点:文件在新位置创建,原位置文件被删除 • 使用场景:文件重命名、文件位置迁移 File.Replace() 方法 • 功能:用源文件内容替换目标文件内容,并创建备份 • 参数要求: • 第一个参数:源文件路径 • 第二个参数:目标文件路径(必须存在) • 第三个参数:备份文件路径(替换前的目标文件将被备份到这里) ```c# string sourceFile = Path.Combine(Environment.CurrentDirectory, "source.txt"); string destFile=Path.Combine(Environment.CurrentDirectory,"destination.txt"); string backupFile = Path.Combine(Environment.CurrentDirectory, "backup.txt"); // File.Move() 示例 - 移动/重命名文件 try { // 如果 destination.txt 不存在,则创建新文件 // 如果存在,则会抛出异常 File.Move(sourceFile, destFile); Console.WriteLine("文件移动成功"); } catch (FileNotFoundException) { Console.WriteLine("源文件不存在"); } catch (IOException) { Console.WriteLine("目标文件已存在或路径无效"); } // File.Replace() 示例 - 替换文件并备份 try { // 要求 destFile 必须存在 // 替换后,原 destFile 内容保存到 backupFile File.Replace(sourceFile, destFile, backupFile); Console.WriteLine("文件替换成功,原目标文件已备份"); } catch (FileNotFoundException ex) { Console.WriteLine($"文件未找到: {ex.Message}"); } catch (IOException ex) { Console.WriteLine($"IO错误: {ex.Message}"); } ``` 5. 文件信息获取 • FileInfo 类:提供文件的详细信息 • FullName:完整路径 • Name:文件名 • Extension:文件扩展名 • Length:文件大小(字节) • CreationTime:创建时间 • LastWriteTime:最后修改时间 • Directory/DirectoryName:父目录信息 • Attributes:文件属性 ```c# //获取文件相关信息 FileInfo info =new FileInfo(destFile); //文件的完整路径 Console.WriteLine(info.FullName); //文件名 Console.WriteLine(info.Name); //后缀(文件扩展名) Console.WriteLine(info.Extension); //文件大小(字节) Console.WriteLine(info.Length); //创建时间 Console.WriteLine(info.CreationTime); //最后一次操作时间 Console.WriteLine(info.LastWriteTime); //获取父文件夹(父目录信息) Console.WriteLine(info.Directory); Console.WriteLine(info.DirectoryName); //文件目录和属性的类 FileAttributes fileAttributes = info.Attributes; ``` 6. 目录信息获取 DirectoryInfo 类功能 • 提供目录的详细信息:用于获取和操作目录相关的信息 • 目录操作方法:提供创建、删除、移动目录等操作方法 主要属性 CreationTime 属性 • 功能:获取目录的创建时间 • 类型:DateTime • 用途:了解目录何时被创建 Attributes 属性 • 功能:获取目录的文件属性 • 类型:FileAttributes 枚举 • 常见值: • Directory:表示这是一个目录 • ReadOnly:只读目录 • Hidden:隐藏目录 • Archive:存档属性 ```c# // 创建 DirectoryInfo 对象 DirectoryInfo dirInfo = new DirectoryInfo(Environment.CurrentDirectory); // 获取目录创建时间 Console.WriteLine($"目录创建时间: {dirInfo.CreationTime}"); // 获取目录属性 FileAttributes dirAttributes = dirInfo.Attributes; Console.WriteLine($"目录属性: {dirAttributes}"); // 其他常用属性 Console.WriteLine($"目录完整路径: {dirInfo.FullName}"); Console.WriteLine($"目录名称: {dirInfo.Name}"); Console.WriteLine($"父目录: {dirInfo.Parent}"); Console.WriteLine($"最后访问时间: {dirInfo.LastAccessTime}"); Console.WriteLine($"最后写入时间: {dirInfo.LastWriteTime}"); ``` 7. 文件属性枚举 FileAttributes 枚举功能 • 表示文件或目录的属性:定义文件和目录的各种属性标志 • 枚举类型:可以组合使用(Flags枚举) 主要属性值 Archive • 含义:文件是档案文件 • 用途:备份程序通常使用此属性来标识自上次备份以来已更改的文件 • 默认状态:新创建的文件通常具有此属性 Directory • 含义:表示目录(文件夹) • 用途:区分文件和目录 • 只读属性:不能手动设置 ReadOnly • 含义:只读文件或目录 • 用途:防止文件被意外修改或删除 • 可设置:可以通过代码修改此属性 ```c# // Hidden:隐藏文件或目录 // System:系统文件 // Normal:正常文件,没有其他属性设置 // Temporary:临时文件 // 获取文件信息 FileInfo fileInfo = new FileInfo("example.txt"); // 检查文件属性 FileAttributes attributes = fileInfo.Attributes; // 检查是否为只读文件 if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) { Console.WriteLine("文件是只读的"); } // 检查是否为隐藏文件 if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden) { Console.WriteLine("文件是隐藏的"); } // 设置文件为只读 fileInfo.Attributes |= FileAttributes.ReadOnly; // 移除只读属性 fileInfo.Attributes &= ~FileAttributes.ReadOnly; ``` 8. 异常处理 • 文件操作应使用 try-catch 处理可能的 IOException、UnauthorizedAccessException 等异常
最新发布
08-02
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值