文档章节

文件读写(一)利用File静态类 System.IO.FileInfo、DirectoryInfo、DriveInfo

o
 osc_pn11u1x9
发布于 2018/08/06 10:01
字数 1902
阅读 23
收藏 0

精选30+云产品,助力企业轻松上云!>>>

提供用于创建、复制、删除、移动和打开单一文件的静态方法,并协助创建 FileStream 对象。

一、读文件:

1、返回字符串:File.ReadAllText()

string readText = File.ReadAllText(@"c:\temp\MyTest.txt");

2、返回字符串数组:File.ReadAllLines()

string[] readText = File.ReadAllLines(@"c:\temp\MyTest.txt", Encoding.UTF8);

3、返回字节数组:File.ReadAllBytes()

byte[] buffer = File.ReadAllBytes(@"c:\temp\MyTest.txt");
string str = Encoding.Default.GetString(buffer, 0, buffer.Length);

4、返回StreamReader:File.OpenText()

打开现有的UTF-8文本以进行读取

using (StreamReader sr = File.OpenText(@"c:\temp\MyTest.txt"))
{
    string s;
    while ((s = sr.ReadLine()) != null)
    {
        Console.WriteLine(s);
    }
}

二、写文件

创建一个新文件向其中写入内容,文件已存在则覆盖。

1、写入字符串:File.WriteAllText(),File.AppendAllText()

string createText = "Hello and Welcome" + Environment.NewLine;
File.WriteAllText(path, createText);

2、返回字符串数组:File.WriteAllLines()

string[] createText = { "Hello", "And", "Welcome" };
File.WriteAllLines(path, createText);

3、返回字节数组:File.WriteAllBytes()

string str = "哈哈哈哈哈哈";
byte[] buffer = Encoding.Default.GetBytes(str);
File.WriteAllBytes(path,buffer);

4、返回StreamWriter:File.CreateText()、File.AppendText()

创建或打开现有的UTF-8文本,以进行写入或追加

using (StreamWriter sw = File.CreateText(path))
{
    sw.WriteLine("Hello");
    sw.WriteLine("And");
    sw.WriteLine("Welcome");
}

三、返回FileStream的操作

File.Open():默认为不共享、具有读/写访问权限

using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.None))
{
    byte[] b = new byte[1024];
    UTF8Encoding temp = new UTF8Encoding(true);

    while (fs.Read(b, 0, b.Length) > 0)
    {
        Console.WriteLine(temp.GetString(b));
    }
}

File.OpenRead():读访问权限

File.OpenWrite:写访问权限

using (FileStream fs = File.OpenWrite(path))
{
    Byte[] info = new UTF8Encoding(true).GetBytes("This is to test the OpenWrite method.");

    // Add some information to the file.
    fs.Write(info, 0, info.Length);
}

File.Create():

using (FileStream fs = File.Create(path))
{
    Byte[] info = new UTF8Encoding(true).GetBytes("This is some text in the file.");
    // Add some information to the file.
    fs.Write(info, 0, info.Length);
}

四、File类的常用操作:

  • 文件删除方法:File.Delete()
  • 文件复制方法:File.Copy()
  • 文件移动方法:File.Move()
  • 设置文件属性方法:File.Set/Get***()
  • 判断文件是否存在的方法:File.Exist()

五、Directory类的常用操作:

  • CreateDirectory(String)    在指定路径中创建所有目录和子目录,除非它们已经存在。
  • Delete(String)    从指定路径删除空目录。
  • Delete(String, Boolean)    删除指定的目录,并删除该目录中的所有子目录和文件(如果表示)。
  • EnumerateDirectories(String)    返回指定路径中的目录名的可枚举集合。
  • EnumerateFiles(String)    返回指定路径中的文件名的可枚举集合。
  • EnumerateFileSystemEntries(String)    返回指定路径中的文件名和目录名的可枚举集合。
  • Exists(String)    确定给定路径是否引用磁盘上的现有目录。
  • GetCurrentDirectory()    获取应用程序的当前工作目录。
  • GetDirectories(String)    返回指定目录中的子目录的名称(包括其路径)。
  • GetDirectoryRoot(String)    返回指定路径的卷信息、根信息或两者同时返回。
  • GetFiles(String)    返回指定目录中文件的名称(包括其路径)。
  • GetFileSystemEntries(String)    返回指定路径中的所有文件和子目录的名称。
  • GetLogicalDrives()    检索此计算机上格式为“<drive letter>:\”的逻辑驱动器的名称。
  • GetParent(String)    检索指定路径的父目录,包括绝对路径和相对路径。
  • Move(String, String)    将文件或目录及其内容移到新位置。
//删除此目录
Directory.Delete(@"C:\新建文件夹")

//删除此目录,true表示要是此目录有子目录也删除,否则就抛出异常
Directory.Delete(@"C:\新建文件夹", false);

//此目录是否存在
bool b = Directory.Exists(@"C:\新建文件夹");

//根据路径返回此目录下的子目录
string[] dirs1 = Directory.GetDirectories(@"C:\新建文件夹");

//第二个参数表示:搜索的范围,就是搜索的文件夹包含“基础”关键字
string[] dirs2 = Directory.GetDirectories(@"C:\新建文件夹", "*.mp3");

//搜索目录下的所有文件
string[] files = Directory.GetFiles(@"C:\新建文件夹");

//第三个参数表示:指定搜索操作应包括所有子目录还是仅包括当前目录。
string[] files1 = Directory.GetFiles(@"C:\新建文件夹", "2.txt", SearchOption.AllDirectories);

//(获取指定目录下的所有目录时返回一个DirectoryInfo数组。)
DirectoryInfo dirs = Directory.GetParent(@"C:\新建文件夹");

//移动、剪切。只能在同一个磁盘中。目录没有Copy方法。可以使用Move()方法实现重命名。
Directory.Move(@"F:\测试\33", @"F:\测试\32\33");

六、FileSystemInfo

派生类:

  • DirectoryInfo
  • FileInfo

FileInfo类

FileInfo类常用字段:

  • Name 提取文件名
  • Directory 所属目录
  • Exists 是否存在(继承自父类FileSystemInfo)
  • Extension 文件扩展名
  • Length 文件长度
  • IsReadOnly 是否为只读

FileInfo类常用方法:

  • Open() 打开文件
  • Create() 创建文件
  • CopyTo() 复制到新文件
  • Delete() 删除文件
  • MoveTo() 移动文件
  • Replace() 替换文件
  • EnCrypt() 加密文件
  • Decrypt() 解密文件

//实例化FileInfo进行操作
FileInfo myfile = new FileInfo(path); //声明一个对象对某一个文件进行操作
myfile.CopyTo(destpath);  //对文件进行复制操作,复制路径为destpath
myfile.MoveTo(destpath);  //进行移动操作
myfile.Delete();          //进行删除操作

//获得某一文件或文件夹的详细信息(创建日期,最后一次修改日期等等)
FileInfo myfile = new FileInfo(path); //声明一个对象对某一个文件进行操作
DateTime dt = myfile.CreationTime;  //获取或设置文件/文件夹的创建日期
string filepath = myfile.DirectoryName; //仅能用于FileInfo,获得完整的路径名,路径+文件名
bool file = myfile.Exists;              //此属性的值表示文件或文件夹是否存在,存在会返回True
string fullname = myfile.FullName;     //获取文件或文件夹的完整路径名
DateTime lastTime = myfile.LastAccessTime; //获取或设置最后一次访问文件或文件夹的时间
DateTime lastWrite = myfile.LastWriteTime; //获取或设置最后一次修改文件夹或文件夹的时间
string name = myfile.Name;                 //获取文件名,不能修改哦
long length = myfile.Length;                  //返回文件的字节大小
//CreationTime,LastAccessTime,LastWriteTime都是可以被修改的。

DirectoryInfo类

属性

  • Attributes    获取或设置当前文件或目录的特性。 (Inherited from FileSystemInfo)
  • CreationTime    获取或设置当前文件或目录的创建时间。 (Inherited from FileSystemInfo)
  • Exists    获取指示目录是否存在的值。
  • Extension    获取表示文件扩展名部分的字符串。 (Inherited from FileSystemInfo)
  • LastAccessTime    获取或设置上次访问当前文件或目录的时间。 (Inherited from FileSystemInfo)
  • LastWriteTime    获取或设置上次写入当前文件或目录的时间。 (Inherited from FileSystemInfo)
  • Name    获取此 DirectoryInfo 实例的名称。
  • Parent    获取指定子目录的父目录。
  • Root    获取目录的根部分。

方法

  • Create()    创建目录。
  • CreateSubdirectory(String)    在指定路径上创建一个或多个子目录。 指定路径可以是相对于 DirectoryInfo 类的此实例的路径。
  • Delete()    如果此 DirectoryInfo 为空,则删除它。
  • EnumerateDirectories()    返回当前目录中的目录信息的可枚举集合。
  • EnumerateFiles()    返回当前目录中的文件信息的可枚举集合。
  • GetDirectories()    返回当前目录的子目录。
  • GetFiles() 返回当前目录的文件列表。
  • GetFileSystemInfos()    返回表示某个目录中所有文件和子目录的强类型 FileSystemInfo 项的数组。
  • MoveTo(String)    将 DirectoryInfo 实例及其内容移动到新路径。
DirectoryInfo dir = new DirectoryInfo(@"d:\C#程序设计");
if (!dir.Exists)
{
    dir.Create();
}
else
{
    Console.WriteLine("该目录已经存在");
}

七、DriveInfo类

在Windows操作系统中,存储介质统称为驱动器,硬盘由于可以划分为多个区域,每一个区域称为一个驱动器。

DriveInfo类的常用字段成员有DriveFormat(文件系统格式,如NTFS或FAT32)、DriveType(驱动器类型)、Name(驱动器名)、TotalSize(总空间)、TotalFreeSpace(获得驱动器可用空间)。常用的方法成员有GetDrives(获得可用驱动器列表)。

DriveType枚举型的枚举值有CDRom(光驱)、Fixed(硬盘)、Network(网络驱动器)和Removeable(软盘或U盘)等。

例如,以下代码可以输出每一个硬盘驱动器的剩余空间信息。

DriveInfo[] drivers = DriveInfo.GetDrives();
foreach (DriveInfo driver in drivers)
{
    if (driver.DriveType == DriveType.Fixed && driver.DriveFormat == "NTFS")
    {
        Console.WriteLine("在{0}驱动器上还有{1}字节的剩余空间。", driver.Name, driver.AvailableFreeSpace);
    }
}
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
.Net那点事儿系列:System.IO之windows文件操作

System.IO系列目录 1.Windows文件目录处理 2.Stream 以及 StreamReader和StreamWriter 3.压缩文件 4.System.IO之内存映射文件共享内存 5.System.IO系列:局域网内多线程使用命名管道在进程之...

长平狐
2012/06/08
143
0
.NET中System.IO

1、目的 若自己编写程序玩玩,需要持久化数据,使用System.IO.Stream派生类持久化数据是一个不错的选择。另外,在WCF技术中,数据传递至远程计算机就需要将数据/对象序列化,因此,将System....

zlbcdn
2013/11/10
261
0
C# 文件流 导入 导出

流是二进制字节序列的面向对象的一个抽象概念,.NET 中利用流进行输入和输出操作,文件从广义上可以看成是保存在磁盘上的二进制字节,是按照一定格式存储的信息。 文件系统类的介绍 文件操作...

osc_8b42ara6
2019/07/23
3
0
.NET Core C# 中级篇2-7 文件操作

.NET Core CSharp 中级篇2-7 本节内容为文件操作 简介 文件操作在我们C#里还是比较常见的,例如我们读取Excel、Txt文件的内容,在程序中,这些文件都是以流的方式读取进入我们内存中,本节内...

osc_rq37fdad
2019/08/28
1
0
路径,文件,目录,I/O常见操作汇总

摘要: 文件操作是程序中非常基础和重要的内容,而路径、文件、目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有...

晨曦之光
2012/03/09
339
0

没有更多内容

加载失败,请刷新页面

加载更多

django框架效率

1. django ORM模式提供食物处理类:transaction.Django默认的事务处理方式时改动就提交,每执行一次就立即提交,这就会花费大量的时间用于IO。Django也支持所有工作都完成后才提交事务这种方...

osc_2clpynvs
刚刚
0
0
Qt编写安防视频监控系统34-onvif事件订阅

一、前言 事件订阅是近期增加的功能,主要是因为遇到越来越多的一个应用场景,能够接收摄像机的报警事件,比如几乎所有的摄像机后面会增加报警输入输出接口,如果用户外接了报警输入,则当触...

飞扬青云
1分钟前
0
0
springboot应用docker部署调用phantomjs出现permission denied修复方法

1. 最近项目中需要对网页生成图片 通过调研发现 phantomjs 转换保真度最好,兼容性不错。因此选择了它。但是在打包作镜像时发现调用 phantomjs 不成功,进入镜像直接使用命令 phantomjs -v 查...

osc_5emtajt2
1分钟前
0
0
Python 实现 T00ls 自动签到脚本(邮件+钉钉通知)

T00ls 每日签到是可以获取 TuBi 的,由于常常忘记签到,导致损失了很多 TuBi 。于是在 T00ls 论坛搜索了一下,发现有不少大佬都写了自己的签到脚本,签到功能实现、定时任务执行以及签到提醒...

osc_w9jimlm8
2分钟前
0
0
springboot~集成elasticsearch的jest

jest是一批操作es的http api接口,你可以像使用普法方法一下操作es,在springboot2.3.0之前,JestClient是支持自动注入的,而在2.3.0之后,你必须为JestClient写一个组件类,通过注入组件类来...

osc_qo2uprmb
4分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部