FileInfo的重要属性和方法

简介: FileInfo类提供与静态File类相同的功能,但是您可以通过手动编写用于从文件读取或写入字节的代码来对文件的读/写操作具有更多控制权。

在这里,您将学习如何使用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 创建具有UTF8编码的StreamReader,该编码器可从现有文本文件读取。

OpenWrite 创建一个只写FileStream。

Replace 用当前FileInfo对象描述的文件替换指定文件的内容,删除原始文件,并创建替换文件的备份。

ToString 以字符串形式返回路径。

下面的示例显示如何手动从文件读取字节,然后使用UTF8编码将它们转换为字符串:

示例:使用FileInfo类读取文件

//为指定路径创建FileInfo对象            

FileInfo fi = new FileInfo(@"D:\DummyFile.txt");

//打开文件进行读\写

FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);  

//创建与FileStream长度相同大小的字节数组

byte[] fileBytes = new byte[fs.Length];

//定义计数器以检查要读取多少字节。读取每个字节时减少计数器

int numBytesToRead = (int)fileBytes.Length;

//计数器指示已读取的字节数

int numBytesRead = 0;

//迭代直到从FileStream中读取所有字节

while (numBytesToRead > 0)

{

   int n = fs.Read(fileBytes, numBytesRead, numBytesToRead);

     

   if (n == 0)

       break;

   numBytesRead += n;

   numBytesToRead -= n;

}

//从FileStream中读取所有字节后,即可使用UTF8编码将其转换为字符串

string filestring = Encoding.UTF8.GetString(fileBytes);

如上面的代码所示,您必须编写许多代码才能从FileSream读取/写入字符串。而使用 StreamReader 和 StreamWriter 可以轻松完成相同的读/写操作。

下面的示例显示 StreamReader 如何使从文件中读取字符串变得容易:

示例:使用 StreamReader 读取文件

//为指定路径创建FileInfo对象            

FileInfo fi = new FileInfo(@"D:\DummyFile.txt");

     

//打开文件进行读\写

FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.Read , FileShare.Read);  

//通过传递需要对其进行操作的FileStream对象来创建StreamReader的对象

StreamReader sr = new StreamReader(fs);

//使用ReadToEnd方法从文件读取所有内容

string fileContent = sr.ReadToEnd();

//操作后关闭StreamReader对象

sr.Close();

fs.Close();

注意,fi.Open() 它具有三个参数:

第一个参数是FileMode,用于创建和打开文件(如果文件不存在);

第二个参数 FileAccess 表示读取操作;

第三个参数是在打开文件时与其他用户共享文件以供阅读。

下面的示例显示 StreamWriter 如何使将字符串写入文件变得更容易:

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

//为指定路径创建FileInfo对象            

FileInfo fi = new FileInfo(@"D:\DummyFile.txt");

     

//打开文件进行读\写

FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read );  

//创建StreamWriter对象以将字符串写入FileSream

StreamWriter sw = new StreamWriter(fs);

sw.WriteLine("Another line from streamwriter");

sw.Close();

不能同时对同一个 FileStream 对象执行读和写操作。如果您已经在读取文件,请创建一个单独的 FileStream 对象以写入同一文件,如下所示:

示例:StreamReader和StreamWriter

//为DummyFile.txt创建FileInfo对象

FileInfo fi = new FileInfo(@"D:\DummyFile.txt");

//打开DummyFile.txt进行读取操作

FileStream fsToRead = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite , FileShare.ReadWrite);  

//打开DummyFile.txt进行写操作

FileStream fsToWrite = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);  

       

//获取StreamReader

StreamReader sr = new StreamReader(fsToRead);

//使用StreamReader对象读取所有文本

string fileContent = sr.ReadToEnd();

sr.Close();

//获取StreamWriter

StreamWriter sw = new StreamWriter(fsToWrite);

//用StreamWriter写一些文字

sw.WriteLine("Another line from streamwriter");

sw.Close();

//关闭所有Stream对象

fsToRead.Close();

fsToWrite.Close();

因此,您可以使用FileInfo,StreamReader 和  StreamWriter类从物理文件读取/写入内容。

相关文章
|
设计模式 Java
Java克隆方式避免频繁创建对象优化方案
Java克隆方式避免频繁创建对象优化方案
279 0
|
开发框架 JavaScript 前端开发
Vue低代码 -- 走进低代码
Vue低代码 -- 走进低代码
625 0
|
API
.net core工具组件系列之Autofac—— 第二篇:Autofac的3种依赖注入方式(构造函数注入、属性注入和方法注入),以及在过滤器里面实现依赖注入
本篇文章接前一篇,建议可以先看前篇文章,再看本文,会有更好的效果。前一篇跳转链接:https://www.cnblogs.com/weskynet/p/15046999.html
1188 0
.net core工具组件系列之Autofac—— 第二篇:Autofac的3种依赖注入方式(构造函数注入、属性注入和方法注入),以及在过滤器里面实现依赖注入
|
10月前
鸿蒙开发:wrapBuilder传递参数
本文,主要简单了介绍了一下,非UI使用的情况下,wrapBuilder传递数据问题,除了以上的方式之外,还有其它的方式可以实现,在实际的开发中,还是具体问题具体分析。
233 61
鸿蒙开发:wrapBuilder传递参数
|
人工智能 运维 Kubernetes
拥抱智算时代:阿里云容器服务智能、托管、弹性新体验
本文总结了2024云栖大会容器计算专场的演讲内容,重点介绍了阿里云容器服务的新产品体验,包括智能、托管、弹性的特点,以及如何助力客户拥抱智算时代。文中还分享了多项实际案例和技术细节,展示了阿里云容器服务在提升用户体验和解决实际问题方面的努力。
|
编译器 C语言
mixing declarations and code is a C99 extension
mixing declarations and code is a C99 extension
886 0
|
存储 缓存 负载均衡
上亿用户级别的短视频APP服务器需要多少钱?
上亿用户级别的短视频APP运营成本高昂,仅CDN一年就可能需2000万。这类应用需复杂的分布式系统,包括云服务器、负载均衡、云数据库、数据库缓存、云存储和CDN等。考虑到自建IDC中心的巨额初期投入及运维成本,租用云服务器成为初创公司的优选,如阿里云提供的成熟解决方案和针对初创企业的补贴计划。
377 0
|
存储 定位技术 对象存储
阿里云对象存储OSS外网流出流量异常增多导致费用上升的解决方法
阿里云对象存储OSS外网流出流量异常增多导致费用上升的解决方法
1219 2
阿里云对象存储OSS外网流出流量异常增多导致费用上升的解决方法
|
网络协议 Windows
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
|
测试技术 网络性能优化 虚拟化
VMWare ESXi中,不同的虚拟网卡性能竟然能相差三倍!
VMWare ESXi中,不同的虚拟网卡性能竟然能相差三倍!