C# - 文件信息
本文关键字:信息 文件 | 更新日期: 2023-09-12 17:40:05
在这里,您将学习如何使用 FileInfo 类对物理文件执行读/写操作。
FileInfo 类提供与静态 File 类相同的功能,但通过手动编写代码以从文件中读取或写入字节,可以更好地控制文件的读/写操作。
文件信息的重要属性和方法:
属性 | 用法 |
---|---|
Directory | 获取父目录的实例。 |
DirectoryName | 获取表示目录的完整路径的字符串。 |
Exists | 获取一个值,该值指示文件是否存在。 |
Extension | 获取表示文件的扩展部分的字符串。 |
FullName | 获取目录或文件的完整路径。 |
IsReadOnly | 获取或设置一个值,该值确定当前文件是否为只读文件。 |
LastAccessTime | 获取或设置上次访问当前文件或目录的时间 |
LastWriteTime | 获取或设置上次写入当前文件或目录的时间 |
Length | 获取当前文件的大小(以字节为单位)。 |
Name | 获取文件的名称。 |
Method | 用法 |
---|---|
AppendText | 创建一个流编写器,该流编写器将文本追加到由此 FileInfo实例表示的文件。 |
CopyTo | 将现有文件复制到新文件,不允许覆盖现有文件。 |
Create | 创建文件。 |
CreateText | 创建写入新文本文件的流编写器。 |
Decrypt | 解密当前帐户使用 Encrypt 方法加密的文件。 |
Delete | 删除指定的文件。 |
Encrypt | 加密文件,以便只有用于加密文件的帐户才能解密文件。 |
GetAccessControl | 获取一个文件安全对象,该对象封装指定文件的访问控制列表 (ACL) 条目。 |
MoveTo | 将指定的文件移动到新位置,并提供指定新文件名的选项。 |
Open | 在指定的文件模式下打开 。 |
OpenRead | 创建一个只读的文件流。 |
OpenText | 创建一个使用 UTF8 编码的 StreamReader,用于从现有文本文件中读取。 |
OpenWrite | 创建一个只写文件流。 |
Replace | 将指定文件的内容替换为当前 FileInfo 对象描述的文件,删除原始文件,并创建已替换文件的备份。 |
ToString | 以字符串形式返回路径。 |
以下示例演示如何手动从文件中读取字节,然后使用 UTF8 编码将它们转换为字符串:
Example: Read file using FileInfo class
//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.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
int numBytesRead = 0;
//iterate till all the bytes read from FileStream
while (numBytesToRead > 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 如何使从文件中读取字符串变得容易:
Example: Read file using 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
string fileContent = sr.ReadToEnd();
//Close StreamReader object after operation
sr.Close();
fs.Close();
请注意,fi.Open()
有三个参数:第一个参数是 FileMode,用于创建和打开文件(如果文件不存在);第二个参数 FileAccess 指示读取操作;第三个参数是在文件打开时与其他用户共享文件以供读取。
下面的示例演示 StreamWriter 如何使将字符串写入文件变得容易:
Example: Write texts to file using 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 对象以写入同一文件,如下所示:
Example: 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类从物理文件中读取/写入内容。