Tutorialsteacher

关注我们

文章
  • C#
  • C# 面向对象编程
  • ASP.NET Core
  • ASP.NET MVC
  • LINQ
  • 控制反转 (IoC)
  • Web API
  • JavaScript
  • TypeScript
  • jQuery
  • Angular 11
  • Node.js
  • D3.js
  • Sass
  • Python
  • Go lang
  • HTTPS (SSL)
  • 正则表达式
  • SQL
  • SQL Server
  • PostgreSQL
  • MongoDB
  • C# - 入门
  • C# - 版本历史
  • C# - 第一个程序
  • C# - 关键词
  • C# - 类和对象
  • C# - 命名空间
  • C# - 变量
  • C# - 隐式类型变量
  • C# - 数据类型
  • 数字
  • 字符串
  • DateTime
  • 结构体
  • 枚举
  • StringBuilder
  • 匿名类型
  • 动态类型
  • 可空类型
  • C# - 值类型和引用类型
  • C# - 接口
  • C# - 运算符
  • C# - if else 语句
  • C# - 三元运算符 ?
  • C# - Switch 语句
  • C# - For 循环
  • C# - While 循环
  • C# - Do-while 循环
  • C# - 分部类
  • C# - Static 关键字
  • C# - 数组
  • 多维数组
  • 交错数组
  • C# - 索引器
  • C# - 泛型
  • 泛型约束
  • C# - 集合
  • ArrayList
  • List
  • SortedList
  • Dictionary
  • Hashtable
  • Stack
  • Queue
  • C# - 元组 (Tuple)
  • C# - 值元组 (ValueTuple)
  • C# - 内置异常
  • 异常处理
  • throw 关键字
  • 自定义异常
  • C# - 委托
  • Func 委托
  • Action 委托
  • Predicate 委托
  • 匿名方法
  • C# - 事件
  • C# - 协变
  • C# - 扩展方法
  • C# - 流 I/O
  • C# - File 类
  • C# - FileInfo 类
  • C# - 对象初始化器
  • OOP - 概述
  • 面向对象编程
  • 抽象
  • 封装
  • 关联与组合
  • 继承
  • 多态
  • 方法重写
  • 方法隐藏
  • C# - SOLID 原则
  • 单一职责原则
  • 开闭原则
  • 里氏替换原则
  • 接口隔离原则
  • 依赖倒置原则
  • 设计模式
  • 单例模式
  • 抽象工厂模式
  • 工厂方法模式
Entity Framework Extensions - 提升 EF Core 9
  批量插入
  批量删除
  批量更新
  批量合并

C# - FileInfo 类

在这里,你将学习如何使用 FileInfo 类对物理文件执行读/写操作。

FileInfo 类提供与静态 File 类相同的功能,但通过手动编写代码从文件中读取或写入字节,你可以对文件的读/写操作有更多的控制。

FileInfo 的重要属性和方法

属性用法
Directory获取父目录的实例。
DirectoryName获取表示目录完整路径的字符串。
Exists获取一个值,指示文件是否存在。
Extension获取表示文件扩展名部分的字符串。
FullName获取目录或文件的完整路径。
IsReadOnly获取或设置一个值,该值决定当前文件是否为只读。
LastAccessTime获取或设置当前文件或目录上次被访问的时间。
LastWriteTime获取或设置当前文件或目录上次被写入的时间。
Length获取当前文件的大小(以字节为单位)。
Name获取文件名。
方法用法
AppendText创建一个 StreamWriter,它将文本附加到此 FileInfo 实例表示的文件。
CopyTo将现有文件复制到新文件,不允许覆盖现有文件。
Create创建一个文件。
CreateText创建一个 StreamWriter,它写入一个新的文本文件。
Decrypt解密使用 Encrypt 方法由当前账户加密的文件。
Delete删除指定文件。
Encrypt加密文件,以便只有用于加密文件的账户才能解密它。
GetAccessControl获取一个 FileSecurity 对象,该对象封装指定文件的访问控制列表 (ACL) 条目。
MoveTo将指定文件移动到新位置,并可选择指定新的文件名。
Open以指定的 FileMode 打开一个文件。
OpenRead创建一个只读的 FileStream。
OpenText创建一个 StreamReader,使用 UTF8 编码从现有文本文件读取。
OpenWrite创建一个只写的 FileStream。
Replace用当前 FileInfo 对象描述的文件替换指定文件的内容,删除原始文件,并创建被替换文件的备份。
ToString返回路径字符串。

以下示例演示了如何手动从文件中读取字节,然后使用 UTF8 编码将它们转换为字符串。

示例:使用 FileInfo 类读取文件

//Create object of FileInfo for specified path           
FileInfo fi = new FileInfo(@"D:DummyFile.txt");

//Open file for Read-Write
FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); 

//create byte array of same size as FileStream length
byte[] fileBytes = new byte[fs.Length];

//define counter to check how much bytes to read. Decrease the counter as you read each byte
int numBytesToRead = (int)fileBytes.Length;

//Counter to indicate number of bytes already read
<span className="kwrd">int</span> numBytesRead = 0;

//iterate till all the bytes read from FileStream
while (numBytesToRead &gt; 0)
{
    int n = fs.Read(fileBytes, numBytesRead, numBytesToRead);
        
    if (n == 0)
        break;

    numBytesRead += n;
    numBytesToRead -= n;
}

//Once you read all the bytes from FileStream, you can convert it into string using UTF8 encoding
string filestring = Encoding.UTF8.GetString(fileBytes);

如上述代码所示,你需要编写大量代码才能从 FileSream 读取/写入字符串。相同的读/写操作可以使用 StreamReader 和 StreamWriter 轻松完成。

以下示例演示了 StreamReader 如何轻松地从文件中读取字符串

示例:使用 StreamReader 读取文件

        //Create object of FileInfo for specified path           
FileInfo fi = new FileInfo(@"D:DummyFile.txt");
        
//Open file for ReadWrite
FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.Read , FileShare.Read); 

//Create object of StreamReader by passing FileStream object on which it needs to operates on
StreamReader sr = new StreamReader(fs);

//Use ReadToEnd method to read all the content from file
<span className="kwrd">string</span> fileContent = sr.ReadToEnd();

//Close StreamReader object after operation
sr.Close();
fs.Close();

请注意,`fi.Open()` 有三个参数:第一个参数是 FileMode,用于创建和打开文件(如果文件不存在);第二个参数 FileAccess 用于指示读取操作;第三个参数是为了在文件打开时与其它用户共享文件进行读取。

以下示例演示了 StreamWriter 如何轻松地将字符串写入文件

示例:使用 StreamWriter 将文本写入文件

        //Create object of FileInfo for specified path           
FileInfo fi = new FileInfo(@"D:DummyFile.txt");
        
//Open file for ReadWrite
FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read ); 

//Create StreamWriter object to write string to FileSream
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("Another line from streamwriter");
sw.Close();

无法在同一个 FileStream 对象上同时进行读写操作。如果你正在从文件中读取,请创建单独的 FileStream 对象来写入同一个文件,如下所示

示例:StreamReader 和 StreamWriter

        //Create FileInfo object for DummyFile.txt
FileInfo fi = new FileInfo(@"D:DummyFile.txt");

//open DummyFile.txt for read operation
FileStream fsToRead = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite , FileShare.ReadWrite); 

//open DummyFile.txt for write operation
FileStream fsToWrite = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); 
          
//get the StreamReader
StreamReader sr = new StreamReader(fsToRead);
//read all texts using StreamReader object
string fileContent = sr.ReadToEnd();
sr.Close();

//get the StreamWriter
StreamWriter sw = new StreamWriter(fsToWrite);
//write some text using StreamWriter
sw.WriteLine("Another line from streamwriter");
sw.Close();

//close all Stream objects
fsToRead.Close();
fsToWrite.Close();

因此,你可以使用 FileInfo、StreamReader 和 StreamWriter 类来读取/写入物理文件中的内容。

延伸阅读
  • FileInfo 类成员
  • StreamReader 类成员
  • StreamWriter 类成员
TUTORIALSTEACHER.COM

TutorialsTeacher.com 是您权威的技术教程来源,旨在通过循序渐进的方法,指导您掌握各种网络和其他技术。

我们的内容帮助所有级别的学习者轻松快速地学习技术。访问此平台即表示您已阅读并同意遵守我们的使用条款和隐私政策,旨在保护您的体验和隐私权。

[email protected]

关于我们使用条款隐私政策
copywrite-symbol

2024 TutorialsTeacher.com. (v 1.2) 版权所有。