环境:Visual Studio 2017,.NET Framework 4.0
本文参考MSDN : https://docs.microsoft.com/zh-cn/dotnet/api/system.io.fileinfo?view=net-5.0
FileInfo:提供用于创建、复制、删除、移动和打开文件的属性和实例方法,并且帮助创建 FileStream 对象。
目录
属性
名称 | 描述 |
---|---|
Attributes | 获取或设置当前文件或目录的特性。 (继承自 FileSystemInfo) |
CreationTime | 获取或设置当前文件或目录的创建时间。 (继承自 FileSystemInfo) |
CreationTimeUtc | 获取或设置当前文件或目录的创建时间,其格式为协调世界时 (UTC)。 (继承自 FileSystemInfo) |
Directory | 获取父目录的实例。 |
DirectoryName | 获取表示目录的完整路径的字符串。 |
Exists | 获取指示文件是否存在的值。 |
Extension | 获取表示文件扩展名部分的字符串。 (继承自 FileSystemInfo) |
FullName | 获取目录或文件的完整目录。 (继承自 FileSystemInfo) |
IsReadOnly | 获取或设置确定当前文件是否为只读的值。 |
LastAccessTime | 获取或设置上次访问当前文件或目录的时间。 (继承自 FileSystemInfo) |
LastAccessTimeUtc | 获取或设置上次访问当前文件或目录的时间,其格式为协调世界时 (UTC)。 (继承自 FileSystemInfo) |
LastWriteTime | 获取或设置上次写入当前文件或目录的时间。 (继承自 FileSystemInfo) |
LastWriteTimeUtc | 获取或设置上次写入当前文件或目录的时间,其格式为协调世界时 (UTC)。 (继承自 FileSystemInfo) |
Length | 获取当前文件的大小(以字节为单位)。 |
Name | 获取文件名。 |
方法
FileInfo class
using System.Runtime.InteropServices;
using System.Security;
using System.Security.AccessControl;
namespace System.IO
{
//
// 摘要:
// 提供用于创建、复制、删除、移动和打开文件的属性和实例方法,并且帮助创建 System.IO.FileStream 对象。 此类不能被继承。 若要浏览此类型的.NET
// Framework 源代码,请参阅 Reference Source。
[ComVisible(true)]
public sealed class FileInfo : FileSystemInfo
{
//
// 摘要:
// 初始化作为文件路径的包装的 System.IO.FileInfo 类的新实例。
//
// 参数:
// fileName:
// 新文件的完全限定名或相对文件名。 路径不要以目录分隔符结尾。
//
// 异常:
// T:System.ArgumentNullException:
// fileName 为 null。
//
// T:System.Security.SecurityException:
// 调用方没有所要求的权限。
//
// T:System.ArgumentException:
// 文件名为空,仅包含空格,或包含无效字符。
//
// T:System.UnauthorizedAccessException:
// 访问 fileName 被拒绝。
//
// T:System.IO.PathTooLongException:
// 指定的路径和/或文件名超过了系统定义的最大长度。 例如,在基于 Windows 的平台上,路径必须少于 248 个字符,且文件名必须少于 260 个字符。
//
// T:System.NotSupportedException:
// fileName 在字符串中间包含一个冒号 (:)。
[SecuritySafeCritical]
public FileInfo(string fileName);
//
// 摘要:
// 获取父目录的实例。
//
// 返回结果:
// 表示此文件父目录的 System.IO.DirectoryInfo 对象。
//
// 异常:
// T:System.IO.DirectoryNotFoundException:
// 指定的路径无效,例如位于未映射的驱动器上。
//
// T:System.Security.SecurityException:
// 调用方没有所要求的权限。
public DirectoryInfo Directory { get; }
//
// 摘要:
// 获取表示目录的完整路径的字符串。
//
// 返回结果:
// 表示目录的完整路径的字符串。
//
// 异常:
// T:System.ArgumentNullException:
// 为目录名传入 null。
//
// T:System.IO.PathTooLongException:
// 完全限定路径为 260 或更多字符。
//
// T:System.Security.SecurityException:
// 调用方没有所要求的权限。
public string DirectoryName { get; }
//
// 摘要:
// 获取当前文件的大小(以字节为单位)。
//
// 返回结果:
// 当前文件的大小(以字节为单位)。
//
// 异常:
// T:System.IO.IOException:
// System.IO.FileSystemInfo.Refresh 无法更新文件或目录的状态。
//
// T:System.IO.FileNotFoundException:
// 文件不存在。 - 或 - 针对某个目录调用了 Length 属性。
public long Length { get; }
//
// 摘要:
// 获取文件名。
//
// 返回结果:
// 文件的名称。
public override string Name { get; }
//
// 摘要:
// 获取或设置确定当前文件是否为只读的值。
//
// 返回结果:
// 如果当前文件为只读,则为 true;否则为 false。
//
// 异常:
// T:System.IO.FileNotFoundException:
// 找不到当前 System.IO.FileInfo 对象描述的文件。
//
// T:System.IO.IOException:
// 打开文件时发生 I/O 错误。
//
// T:System.UnauthorizedAccessException:
// 当前平台不支持此操作。 - 或 - 调用方没有所要求的权限。
//
// T:System.ArgumentException:
// 此用户没有写入权限,但尝试将此属性设置为 false。
public bool IsReadOnly { get; set; }
//
// 摘要:
// 获取指示文件是否存在的值。
//
// 返回结果:
// 如果该文件存在,则为 true;如果文件不存在或文件即是目录,则为 false。
public override bool Exists { get; }
//
// 摘要:
// 创建一个 System.IO.StreamWriter,它向 System.IO.FileInfo 的此实例表示的文件追加文本。
//
// 返回结果:
// 一个新的 StreamWriter。
public StreamWriter AppendText();
//
// 摘要:
// 将现有文件复制到新文件,不允许覆盖现有文件。
//
// 参数:
// destFileName:
// 要复制到的新文件的名称。
//
// 返回结果:
// 带有完全限定路径的新文件。
//
// 异常:
// T:System.ArgumentException:
// destFileName 为空,仅包含空格,或包含无效字符。
//
// T:System.IO.IOException:
// 出现错误,或目标文件已存在。
//
// T:System.Security.SecurityException:
// 调用方没有所要求的权限。
//
// T:System.ArgumentNullException:
// destFileName 为 null。
//
// T:System.UnauthorizedAccessException:
// 传入一个目录路径或此文件将被移至其他驱动器。
//
// T:System.IO.DirectoryNotFoundException:
// 在 destFileName 中指定的此目录不存在。
//
// T:System.IO.PathTooLongException:
// 指定的路径和/或文件名超过了系统定义的最大长度。 例如,在基于 Windows 的平台上,路径必须少于 248 个字符,且文件名必须少于 260 个字符。
//
// T:System.NotSupportedException:
// destFileName 在其字符串中包含冒号 (:) ,但并未指定卷。
public FileInfo CopyTo(string destFileName);
//
// 摘要:
// 将现有文件复制到新文件,允许覆盖现有文件。
//
// 参数:
// destFileName:
// 要复制到的新文件的名称。
//
// overwrite:
// 如果允许覆盖现有文件,则为 true;否则为 false。
//
// 返回结果:
// 为新文件;如果 overwrite 是 true,则为现有文件的覆盖。 如果文件存在且 overwrite 为 false,则引发 System.IO.IOException。
//
// 异常:
// T:System.ArgumentException:
// destFileName 为空,仅包含空格,或包含无效字符。
//
// T:System.IO.IOException:
// 出现错误,或目标文件已存在,且 overwrite 为 false。
//
// T:System.Security.SecurityException:
// 调用方没有所要求的权限。
//
// T:System.ArgumentNullException:
// destFileName 为 null。
//
// T:System.IO.DirectoryNotFoundException:
// 在 destFileName 中指定的此目录不存在。
//
// T:System.UnauthorizedAccessException:
// 传入一个目录路径或此文件将被移至其他驱动器。
//
// T:System.IO.PathTooLongException:
// 指定的路径和/或文件名超过了系统定义的最大长度。 例如,在基于 Windows 的平台上,路径必须少于 248 个字符,且文件名必须少于 260 个字符。
//
// T:System.NotSupportedException:
// destFileName 在字符串中间包含一个冒号 (:)。
public FileInfo CopyTo(string destFileName, bool overwrite);
//
// 摘要:
// 创建文件。
//
// 返回结果:
// 新文件。
public FileStream Create();
//
// 摘要:
// 创建写入新文本文件的 System.IO.StreamWriter。
//
// 返回结果:
// 一个新的 StreamWriter。
//
// 异常:
// T:System.UnauthorizedAccessException:
// 文件名是目录。
//
// T:System.IO.IOException:
// 此盘为只读。
//
// T:System.Security.SecurityException:
// 调用方没有所要求的权限。
public StreamWriter CreateText();
//
// 摘要:
// 使用 System.IO.FileInfo.Encrypt 方法解密由当前帐户加密的文件。
//
// 异常:
// T:System.IO.DriveNotFoundException:
// 指定了无效的驱动器。
//
// T:System.IO.FileNotFoundException:
// 找不到当前 System.IO.FileInfo 对象描述的文件。
//
// T:System.IO.IOException:
// 打开文件时发生 I/O 错误。
//
// T:System.NotSupportedException:
// 文件系统不是 NTFS。
//
// T:System.PlatformNotSupportedException:
// 当前操作系统不是 Microsoft Windows NT 或更高版本。
//
// T:System.UnauthorizedAccessException:
// 当前 System.IO.FileInfo 对象描述的文件为只读文件。 - 或 - 当前平台不支持此操作。 - 或 - 调用方没有所要求的权限。
[ComVisible(false)]
public void Decrypt();
//
// 摘要:
// 永久删除文件。
//
// 异常:
// T:System.IO.IOException:
// 目标文件打开或在运行 Microsoft Windows NT 的计算机上进行内存映射。 - 或 - 在文件中存在开放句柄,并且操作系统是 Windows
// XP 或更早的版本。 枚举目录和文件可能会导致此开放句柄出现。 有关详细信息,请参阅如何:枚举目录和文件。
//
// T:System.Security.SecurityException:
// 调用方没有所要求的权限。
//
// T:System.UnauthorizedAccessException:
// 路径是一个目录。
[SecuritySafeCritical]
public override void Delete();
//
// 摘要:
// 将某个文件加密,使得只有加密该文件的帐户才能将其解密。
//
// 异常:
// T:System.IO.DriveNotFoundException:
// 指定了无效的驱动器。
//
// T:System.IO.FileNotFoundException:
// 找不到当前 System.IO.FileInfo 对象描述的文件。
//
// T:System.IO.IOException:
// 打开文件时发生 I/O 错误。
//
// T:System.NotSupportedException:
// 文件系统不是 NTFS。
//
// T:System.PlatformNotSupportedException:
// 当前操作系统不是 Microsoft Windows NT 或更高版本。
//
// T:System.UnauthorizedAccessException:
// 当前 System.IO.FileInfo 对象描述的文件为只读文件。 - 或 - 当前平台不支持此操作。 - 或 - 调用方没有所要求的权限。
[ComVisible(false)]
public void Encrypt();
//
// 摘要:
// 获取 System.Security.AccessControl.FileSecurity 对象,该对象封装当前 System.IO.FileInfo 对象所描述的文件的访问控制列表
// (ACL) 项。
//
// 返回结果:
// 一个 System.Security.AccessControl.FileSecurity 对象,该对象封装当前文件的访问控制规则。
//
// 异常:
// T:System.IO.IOException:
// 打开文件时发生 I/O 错误。
//
// T:System.PlatformNotSupportedException:
// 当前操作系统不是 Microsoft Windows 2000 或更高版本。
//
// T:System.Security.AccessControl.PrivilegeNotHeldException:
// 当前的系统帐户没有管理权限。
//
// T:System.SystemException:
// 找不到文件。
//
// T:System.UnauthorizedAccessException:
// 当前平台不支持此操作。 - 或 - 调用方没有所要求的权限。
public FileSecurity GetAccessControl();
//
// 摘要:
// 获取一个 System.Security.AccessControl.FileSecurity 对象,该对象封装当前 System.IO.FileInfo
// 对象所描述的文件的指定类型的访问控制列表 (ACL) 项。
//
// 参数:
// includeSections:
// System.Security.AccessControl.AccessControlSections 值之一,该值指定要检索的访问控制项组。
//
// 返回结果:
// 一个 System.Security.AccessControl.FileSecurity 对象,该对象封装当前文件的访问控制规则。
//
// 异常:
// T:System.IO.IOException:
// 打开文件时发生 I/O 错误。
//
// T:System.PlatformNotSupportedException:
// 当前操作系统不是 Microsoft Windows 2000 或更高版本。
//
// T:System.Security.AccessControl.PrivilegeNotHeldException:
// 当前的系统帐户没有管理权限。
//
// T:System.SystemException:
// 找不到文件。
//
// T:System.UnauthorizedAccessException:
// 当前平台不支持此操作。 - 或 - 调用方没有所要求的权限。
public FileSecurity GetAccessControl(AccessControlSections includeSections);
//
// 摘要:
// 将指定文件移到新位置,提供要指定新文件名的选项。
//
// 参数:
// destFileName:
// 要将文件移动到的路径,可以指定另一个文件名。
//
// 异常:
// T:System.IO.IOException:
// 发生 I/O 错误,例如目标文件已存在或目标设备未就绪。
//
// T:System.ArgumentNullException:
// destFileName 为 null。
//
// T:System.ArgumentException:
// destFileName 为空,仅包含空格,或包含无效字符。
//
// T:System.Security.SecurityException:
// 调用方没有所要求的权限。
//
// T:System.UnauthorizedAccessException:
// destFileName 为只读或是目录。
//
// T:System.IO.FileNotFoundException:
// 未找到此文件。
//
// T:System.IO.DirectoryNotFoundException:
// 指定的路径无效,例如位于未映射的驱动器上。
//
// T:System.IO.PathTooLongException:
// 指定的路径和/或文件名超过了系统定义的最大长度。 例如,在基于 Windows 的平台上,路径必须少于 248 个字符,且文件名必须少于 260 个字符。
//
// T:System.NotSupportedException:
// destFileName 在字符串中间包含一个冒号 (:)。
[SecuritySafeCritical]
public void MoveTo(string destFileName);
//
// 摘要:
// 在指定的模式中打开文件。
//
// 参数:
// mode:
// 一个 System.IO.FileMode 常数,它指定打开文件所采用的模式(例如 Open 或 Append)。
//
// 返回结果:
// 在指定模式中打开、具有读/写访问权限且不共享的文件。
//
// 异常:
// T:System.IO.FileNotFoundException:
// 未找到此文件。
//
// T:System.UnauthorizedAccessException:
// 文件为只读或是目录。
//
// T:System.IO.DirectoryNotFoundException:
// 指定的路径无效,例如位于未映射的驱动器上。
//
// T:System.IO.IOException:
// 此文件已打开。
public FileStream Open(FileMode mode);
//
// 摘要:
// 用读、写或读/写访问权限和指定的共享选项在指定的模式中打开文件。
//
// 参数:
// mode:
// 一个 System.IO.FileMode 常数,它指定打开文件所采用的模式(例如 Open 或 Append)。
//
// access:
// 一个 System.IO.FileAccess 常数,它指定是使用 Read、Write 还是 ReadWrite 文件访问来打开文件。
//
// share:
// 一个 System.IO.FileShare 常数,它指定其他 FileStream 对象对此文件拥有的访问类型。
//
// 返回结果:
// 用指定的模式、访问权限和共享选项打开的 System.IO.FileStream 对象。
//
// 异常:
// T:System.Security.SecurityException:
// 调用方没有所要求的权限。
//
// T:System.IO.FileNotFoundException:
// 未找到此文件。
//
// T:System.UnauthorizedAccessException:
// path 为只读或是目录。
//
// T:System.IO.DirectoryNotFoundException:
// 指定的路径无效,例如位于未映射的驱动器上。
//
// T:System.IO.IOException:
// 此文件已打开。
public FileStream Open(FileMode mode, FileAccess access, FileShare share);
//
// 摘要:
// 用读、写或读/写访问权限在指定模式下打开文件。
//
// 参数:
// mode:
// 一个 System.IO.FileMode 常数,它指定打开文件所采用的模式(例如 Open 或 Append)。
//
// access:
// 一个 System.IO.FileAccess 常数,它指定是使用 Read、Write 还是 ReadWrite 文件访问来打开文件。
//
// 返回结果:
// 用指定模式和访问权限打开的且不共享的 System.IO.FileStream 对象。
//
// 异常:
// T:System.Security.SecurityException:
// 调用方没有所要求的权限。
//
// T:System.IO.FileNotFoundException:
// 未找到此文件。
//
// T:System.UnauthorizedAccessException:
// path 为只读或是目录。
//
// T:System.IO.DirectoryNotFoundException:
// 指定的路径无效,例如位于未映射的驱动器上。
//
// T:System.IO.IOException:
// 此文件已打开。
public FileStream Open(FileMode mode, FileAccess access);
//
// 摘要:
// 创建一个只读的 System.IO.FileStream。
//
// 返回结果:
// 一个新的只读的 System.IO.FileStream 对象。
//
// 异常:
// T:System.UnauthorizedAccessException:
// path 为只读或是目录。
//
// T:System.IO.DirectoryNotFoundException:
// 指定的路径无效,例如位于未映射的驱动器上。
//
// T:System.IO.IOException:
// 此文件已打开。
public FileStream OpenRead();
//
// 摘要:
// 创建使用从现有文本文件中读取的 UTF8 编码的 System.IO.StreamReader。
//
// 返回结果:
// 使用 UTF8 编码的新的 StreamReader。
//
// 异常:
// T:System.Security.SecurityException:
// 调用方没有所要求的权限。
//
// T:System.IO.FileNotFoundException:
// 未找到此文件。
//
// T:System.UnauthorizedAccessException:
// path 为只读或是目录。
//
// T:System.IO.DirectoryNotFoundException:
// 指定的路径无效,例如位于未映射的驱动器上。
[SecuritySafeCritical]
public StreamReader OpenText();
//
// 摘要:
// 创建一个只写的 System.IO.FileStream。
//
// 返回结果:
// 新的或现有文件的只写非共享的 System.IO.FileStream 对象。
//
// 异常:
// T:System.UnauthorizedAccessException:
// 创建 System.IO.FileInfo 对象的实例时指定的路径为只读或是目录。
//
// T:System.IO.DirectoryNotFoundException:
// 创建 System.IO.FileInfo 对象的实例时指定的路径无效,例如此路径位于未映射的驱动器。
public FileStream OpenWrite();
//
// 摘要:
// 使用当前 System.IO.FileInfo 对象所描述的文件替换指定文件的内容,这一过程将删除原始文件,并创建被替换文件的备份。
//
// 参数:
// destinationFileName:
// 要替换为当前文件的文件的名称。
//
// destinationBackupFileName:
// 文件的名称,该文件用于创建 destFileName 参数所描述的文件的备份。
//
// 返回结果:
// 一个 System.IO.FileInfo 对象,该对象封装有关 destFileName 参数所描述的文件的信息。
//
// 异常:
// T:System.ArgumentException:
// destFileName 参数描述的路径格式不合法。 - 或 - destBackupFileName 参数描述的路径格式不合法。
//
// T:System.ArgumentNullException:
// destFileName 参数为 null。
//
// T:System.IO.FileNotFoundException:
// 找不到当前 System.IO.FileInfo 对象描述的文件。 - 或 - 找不到 destinationFileName 参数描述的文件。
//
// T:System.PlatformNotSupportedException:
// 当前操作系统不是 Microsoft Windows NT 或更高版本。
[ComVisible(false)]
public FileInfo Replace(string destinationFileName, string destinationBackupFileName);
//
// 摘要:
// 使用当前 System.IO.FileInfo 对象所描述的文件替换指定文件的内容,这一过程将删除原始文件,并创建被替换文件的备份。 还指定是否忽略合并错误。
//
// 参数:
// destinationFileName:
// 要替换为当前文件的文件的名称。
//
// destinationBackupFileName:
// 文件的名称,该文件用于创建 destFileName 参数所描述的文件的备份。
//
// ignoreMetadataErrors:
// 若要忽略从被替换文件到替换文件的合并错误(例如特性和 ACL),请设置为 true;否则设置为 false。
//
// 返回结果:
// 一个 System.IO.FileInfo 对象,该对象封装有关 destFileName 参数所描述的文件的信息。
//
// 异常:
// T:System.ArgumentException:
// destFileName 参数描述的路径格式不合法。 - 或 - destBackupFileName 参数描述的路径格式不合法。
//
// T:System.ArgumentNullException:
// destFileName 参数为 null。
//
// T:System.IO.FileNotFoundException:
// 找不到当前 System.IO.FileInfo 对象描述的文件。 - 或 - 找不到 destinationFileName 参数描述的文件。
//
// T:System.PlatformNotSupportedException:
// 当前操作系统不是 Microsoft Windows NT 或更高版本。
[ComVisible(false)]
public FileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors);
//
// 摘要:
// 将 System.Security.AccessControl.FileSecurity 对象所描述的访问控制列表 (ACL) 项应用于当前 System.IO.FileInfo
// 对象所描述的文件。
//
// 参数:
// fileSecurity:
// 一个 System.Security.AccessControl.FileSecurity 对象,该对象描述要应用于当前文件的访问控制列表 (ACL) 项。
//
// 异常:
// T:System.ArgumentNullException:
// fileSecurity 参数为 null。
//
// T:System.SystemException:
// 未能找到或修改该文件。
//
// T:System.UnauthorizedAccessException:
// 当前进程不具有打开该文件的权限。
//
// T:System.PlatformNotSupportedException:
// 当前操作系统不是 Microsoft Windows 2000 或更高版本。
public void SetAccessControl(FileSecurity fileSecurity);
//
// 摘要:
// 以字符串形式返回路径。
//
// 返回结果:
// 一个表示该路径的字符串。
public override string ToString();
}
}
应用示例
1、读取文件内容
根据指定的文件路径,读取文件内容。
string path = @"E:\TestData\t\1.txt";
FileInfo fi1 = new FileInfo(path);
using (StreamReader sr = fi1.OpenText())
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
Console.WriteLine(s);
}
}
2、创建文件并写入文本
根据指定的文件路径,创建文件,并写文件写入文本数据。
string path = @"E:\TestData\t\" + DateTime.Now.ToString("yyyyMMddyymmss") + ".txt";
FileInfo fi1 = new FileInfo(path);
// 创建文件,并向文件写入文本数据
using (StreamWriter sw = fi1.CreateText())
{
sw.WriteLine("Hello world.");
sw.WriteLine("Welcome to FileInfo.");
}
// 打开文件,读取文件文本
using (StreamReader sr = fi1.OpenText())
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
Console.WriteLine(s);
}
}
3、读取被占用的文件
如下图所示,一个excel文件打开了,如果我们要用FileInfo打开它就会报错。
可以用public FileStream Open(FileMode mode, FileAccess access, FileShare share),它的第3个参数 FileShare 就是指定FileStream访问权限。
using System.Runtime.InteropServices;
namespace System.IO
{
//
// 摘要:
// 包含用于控制的访问其他类型的常数 System.IO.FileStream 对象可以具有相同的文件。
[ComVisible(true)]
[Flags]
public enum FileShare
{
//
// 摘要:
// 拒绝共享当前文件。 在关闭文件之前,任何请求打开的文件 (此进程或另一个进程) 将失败。
None = 0,
//
// 摘要:
// 允许以后打开文件进行读取。 如果未指定此标志,任何请求打开文件进行读取 (通过这一过程或另一个进程) 无法关闭文件之前。 但是,即使指定了此标志,其他权限可能仍然需要访问该文件。
Read = 1,
//
// 摘要:
// 允许以后打开文件进行写入。 如果未指定此标志,任何请求打开文件进行写入 (通过这一过程或另一个进程) 无法关闭文件之前。 但是,即使指定了此标志,其他权限可能仍然需要访问该文件。
Write = 2,
//
// 摘要:
// 允许以后打开的文件进行读取或写入。 如果未指定此标志,任何请求打开文件进行读取或写入 (通过这一过程或另一个进程) 将失败,在关闭文件之前。 但是,即使指定了此标志,其他权限可能仍然需要访问该文件。
ReadWrite = 3,
//
// 摘要:
// 允许以后删除文件。
Delete = 4,
//
// 摘要:
// 使文件句柄由子进程继承。 这是不直接支持 Win32。
Inheritable = 16
}
}
FileStream fsRead = fi1.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite) 这样就可以打开文件了,读取文件内容了
string path = @"E:\TestData\t\e1.xlsx";
FileInfo fi1 = new FileInfo(path);
using (FileStream fsRead = fi1.Open(FileMode.Open,FileAccess.Read, FileShare.ReadWrite))
{
StreamReader sr = new StreamReader(fsRead, System.Text.Encoding.Default);
var s = "";
while ((s = sr.ReadLine()) != null)
{
Console.WriteLine(s);
}
}
其实呢,也可以先通过CopyTo()方法复制一份文件,再读取文件内容。。。。。。。
string path = @"E:\TestData\t\e1.xlsx";
FileInfo fi1 = new FileInfo(path);
string path2 = @"E:\TestData\t\" + DateTime.Now.ToString("yyyyMMddyymmss") + ".txt";
fi1.CopyTo(path2);
FileInfo fi2 = new FileInfo(path2);
using (StreamReader sr = fi2.OpenText())
{
var s = "";
while ((s = sr.ReadLine()) != null)
{
Console.WriteLine(s);
}
}
4、文件创建时间、更新时间
需要拿文件更新的内容更新数据库信息的时候,可以根据文件的最后更新时间判断最近是否有修改文件内容,然后再做进一步的操作。
string path = @"E:\TestData\t\e1.xlsx";
FileInfo fi1 = new FileInfo(path);
Console.WriteLine("CreationTime: " + fi1.CreationTime);
Console.WriteLine("LastWriteTime: " + fi1.LastWriteTime);
Console.WriteLine("LastAccessTime: " + fi1.LastAccessTime);