猿教程 Logo

C# FileInfo类

您已经学习了如何使用上一节中的静态File类对物理文件执行不同的任务。 这里,我们将使用FileInfo类对物理文件执行读/写操作。

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


FileInfo主要的属性和方法

属性描述
Directory获取父目录的实例。
DirectoryName获取表示目录的完整路径的字符串。
Exists获取一个指示文件是否存在的值。
Extension获取表示文件扩展名部分的字符串。
FullName获取目录或文件的完整路径。
IsReadOnly获取或设置一个值,以确定当前文件是否为只读。
LastAccessTime获取或设置上次访问当前文件或目录的时间
LastWriteTime获取或设置当前文件或目录上次写入的时间
Length获取当前文件的大小(以字节为单位)。
Name获取文件的名称。


方法描述
AppendText创建一个StreamWriter,用于将文本附加到由FileInfo的此实例表示的文件。
CopyTo将现有文件复制到新文件,禁止覆盖现有文件。
Create创建文件。
CreateText创建一个用于写入新文本文件的StreamWriter。
Decrypt解密由当前帐户使用加密方法加密的文件。
Delete删除指定的文件。
Encrypt加密文件,以便只有用于加密文件的帐户才能对其进行解密。
GetAccessControl获取封装指定文件的访问控制列表(ACL)条目的FileSecurity对象。
MoveTo将指定的文件移动到新位置,提供指定新文件名的选项。
Open在指定的文件模式中打开。
OpenRead创建只读FileStream。
OpenText创建一个具有从现有文本文件读取的UTF8编码的StreamReader。
OpenWrite创建一个只写FileStream。
Replace将指定文件的内容替换为当前FileInfo对象描述的文件,删除原始文件,并创建替换文件的备份。
ToString以字符串形式返回路径。

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

相关实例:

//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 butes 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如何使得从文件中读取字符串变得容易:

相关实例:

//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.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如何轻松地将字符串写入文件:

相关实例:

//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.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对象以写入同一个文件,如下所示:

相关实例:

//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相关的资料

FileInfo类成员

StreamReader类成员

StreamWriter类成员

重点
  1. 使用FileInfo类手动对物理文件执行操作。

  2. 使用StreamReader和StreamWriter类与FileInfo从物理文件读取或写入字符串。


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/CSharp/Csharp-fileinfo.html