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类从物理文件中读取/写入内容。