一、File 类

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

using System.IO;

没有构造函数和属性

 写入数据

1.WriteAllText(String, String)   创建一个新文件,向其中写入指定的字符串,然后关闭文件。 如果目标文件已存在,则覆盖该文件。

文件的数据会全部覆盖

            string a = @"G:\N\a.txt";
File.WriteAllText(a,"abc");

2.WriteAllText(String, String, Encoding) 创建一个新文件,使用指定编码向其中写入指定的字符串,然后关闭文件。 如果目标文件已存在,则覆盖该文件。

3.AppendAllText(String, String)  打开一个文件,向其中追加指定的字符串,然后关闭该文件。 如果文件不存在,此方法将创建一个文件,将指定的字符串写入文件,然后关闭该文件。

紧接着数据后加字符串,不会换行。

读取数据

1.

//打开一个文件,使用指定的编码读取文件的所有行,然后关闭该文件
//参数2可无(自动检测根据字节顺序标记存在的文件的编码)
string str= File.ReadAllText(@"D:\a.txt", Encoding.UTF8);

2.

 复制

1.Copy(String, String)  将现有文件复制到新文件。 不允许覆盖同名的文件。

string a = @"G:\a.txt";
string c = @"G:\M\c.txt";
File.Copy(a,c);

第一个参数是原文件,第二个参数是新生成的文件。路径必须是真实有效的,不会自动创建不存在的路径

如果参数二的路径下已存在同名文件,则它会提示该路径下已有文件不允许重新创建

2.Copy(String, String, Boolean) 将现有文件复制到新文件。 允许覆盖同名的文件。

第三个参数true时可以覆盖新文件,否则为flase

3.Create(String) 在指定路径中创建或覆盖文件。

 string a = @"G:\a.txt";
File.Create(a);

在该路径下创建一个空文件,以前的文件覆盖后变空

 删除

Delete(String) 删除指定的文件。

  string a = @"G:\a.txt";
File.Delete(a);

 移动

Move(String, String)  将指定文件移到新位置,提供要指定新文件名的选项。

            string c = @"G:\M\c.txt";
string a = @"G:\N\a.txt";
File.Move(c, a);

把参数一移动到参数二并重命名, 不能覆盖目标文件

判断文件存在

Exists(String) 确定指定的文件是否存在。返回一个布尔值

 string a = @"G:\a.txt";
if (File.Exists(a))
  Console.WriteLine("文件已存在");
else
  Console.WriteLine("文件不存在");
Console.ReadLine();

文件日期更改

SetCreationTime(String, DateTime) 设置创建该文件的日期和时间。

            string c = @"G:\M\c.txt";
string a = @"G:\N\a.txt";
DateTime dt = DateTime.Now;
File.SetCreationTime(a,dt);

SetLastAccessTime(String, DateTime)  设置上次访问指定文件的日期和时间。

SetLastWriteTime(String, DateTime) 设置上次写入指定文件的日期和时间。(修改时间)

 

判断使用静态的File类还是FileInfo类:
1、如果应用程序在文件上执行几种操作,则使用FileInfo类更好一些,因为创建对象时,已经引用了正确的文件,而静态类每次都要寻找文件,会花费更多时间。
2、如果进行单一的方法调用,则建议用File类,不必实例化对象。

二、FileStream 类

1.流

流的概念:流是一个用于传输数据的对象。

如果数据从外部源传输到程序中,就是读取流。如果数据从程序传输到外部源中,就是写入流。

外部源有可能是网络上的数据,或内存区域等。System.Net.Sockets.NetworkStream对象处理网络数据,System.IO.MemoryStream对象用来读取内存。

使用独立的流对象传输数据比使用FileInfo类等更好,把传输数据的概念与特定数据源分离开,可以更容易交换数据源,更容易实现不同环境下代码的重用

读写文件最常用的类

FileStream(文件流):主要用于在二进制文件中读写二进制数据,也可以用它读写任何数据。

StreamReader(流读取器)和StreamWriter(流写入器)-这两类专门用于读写文本文件。

BinaryReader和BinarReader这两类本身并不实现流,但能够提供其他流对象的包装器。

2.缓存的流

3.FileStream类

为文件提供 Stream,既支持同步读写操作,也支持异步读写操作。

构造方法

FileStream(String, FileMode)        使用指定的路径和创建模式初始化 FileStream 类的新实例

FileStream(String, FileMode, FileAccess)  使用指定的路径、创建模式和读/写权限初始化 FileStream 类的新实例

FileStream fs = new FileStream(file_name, FileMode.OpenOrCreate, FileAccess.Read);

FileMode枚举类

FileMode枚举是一个简单枚举,用于指定操作系统打开文件的方式。

枚举成员    

CreateNew    指定操作系统应创建新文件,如果文件存在则引发异常。

Create      指定操作系统创建新文件,如果文件已存在则覆盖之。

Open        指定 操作系统应打开现有文件,如果文件不存在则抛出异常。

OpenOrCreate  指定操作系统应打开文件,如果文件不存在则创建之。

Truncate      指定操作系统打开现有文件,如果文件已存在则清空,从Truncate打开的文件中读取将引发异常。

Append      若文件存在,则找到文件并找到文件结尾,或者创建一个新文件。

FileAccess 枚举

FileAccess用于控制对文件的读访问、写访问或读/写访问的常熟

枚举成员        

Read      对文件的读访问,拥有读取权限。

Write       对文件的写访问,拥有写入权限。

ReadWrite    对文件的读访问和写访问,拥有读取和写入权限。

属性

Length  获取用字节表示的流长度

byte[] myByteArray = new byte[fs.Length]; //创建一个长度为fs.Length的byte数组,并且其中每个byte的值为0

方法

Read(Byte[], Int32, Int32)   从流中读取字节块并将该数据写入给定缓冲区中。

fs.Read(myByteArray, , System.Convert.ToInt32(fs.Length));

 日志

        /// <summary>
/// 向txt文件写入内容
/// </summary>
/// <param name="path">txt文件保存的路径,没有就创建,有内容就覆盖。例:"E:\\log.txt"</param>
/// <param name="contentSrt">要写入的内容</param>
private void WriteTxt(string path, string contentSrt)
{
FileStream fs = new FileStream(path, FileMode.Append);
StreamWriter wr = null;
wr = new StreamWriter(fs);
wr.WriteLine(contentSrt + " " + DateTime.Now.ToString());
wr.Close();
}

映射内存的文件

.NET Framework4.5

using System.IO.MemoryMappedFiles;

读取驱动器信息

使用 DriveInfo读取磁盘信息

using System.IO;

代码

            DriveInfo[] driveInfo= DriveInfo.GetDrives();
foreach (DriveInfo d in driveInfo)
{
//c盘、d盘
Console.WriteLine("驱动器的名称:{0}",d.Name);
//获取驱动器类型,如 CD-ROM、可移动、网络或固定
Console.WriteLine("驱动器的类型:{0}", d.DriveType);
//获取一个指示驱动器是否已准备好的值
if (d.IsReady==true)
{
//获取或设置驱动器的卷标
Console.WriteLine("驱动器的卷标:{0}", d.VolumeLabel);
//获取文件系统的名称,例如 NTFS 或 FAT32
Console.WriteLine("驱动器件系统的名称:{0}", d.DriveFormat);
//驱动器上的可用空闲空间总量(以字节为单位)
Console.WriteLine("驱动器上的可用空闲空间总量:{0}GB", d.TotalFreeSpace/(**));
//获取驱动器上存储空间的总大小(以字节为单位)
Console.WriteLine("驱动器上存储空间的总大小:{0}GB", d.TotalSize /( * * ));
Console.WriteLine("");
} }
Console.ReadKey();

运行

文件转内存流

byte[] data = File.ReadAllBytes(filePath); MemoryStream ms = new MemoryStream(data);

(32)C#文件读写的更多相关文章

  1. python基础之文件读写

    python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使用os模块的一些方法如下: 得到 ...

  2. mmap和普通文件读写的区别和比较 & mmap的注意点

    参考 http://www.cnblogs.com/huxiao-tee/p/4660352.html 对linux文件系统不了解的朋友,请参阅我之前写的博文<从内核文件系统看文件读写过程> ...

  3. 第二篇:python基础之文件读写

    python基础之文件读写   python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使 ...

  4. c++ 文件读写(转)

    C/C++ code //创建一个文本文件并写入信息 //同向屏幕上输出信息一样将信息输出至文件 #include<iomanip.h> #include<fstream.h> ...

  5. ios 简单的plist文件读写操作(Document和NSUserDefaults)

    最近遇到ios上文件读写操作的有关知识,记录下来,以便以后查阅,同时分享与大家. 一,简单介绍一下常用的plist文件. 全名是:Property List,属性列表文件,它是一种用来存储串行化后的对 ...

  6. python笔记(三)---文件读写、修改文件内容、处理json、函数

    文件读写(一) #r 只读,打开文件不存在的话,会报错 #w 只写,会清空原来文件的内容 #a 追加写,不会请求,打开的文件不存在的话,也会帮你新建的一个文件 print(f.read()) #获取到 ...

  7. 文件读写’r'和’rb’区别

    2012年08月22日 ⁄ 综合 ⁄ 共 849字 ⁄ 字号 小 中 大 ⁄ 评论关闭不管何种语言在进行文件读写时,大家都知道有以下模式: r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别 ...

  8. QSettings配置读写-win注册表操作-ini文件读写

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QSettings配置读写-win注册表操作-ini文件读写     本文地址:http:// ...

  9. 使用FileSystem类进行文件读写及查看文件信息

    使用FileSystem类进行文件读写及查看文件信息   在这一节我们要深入了解Hadoop的FileSystem类——这是与与hadoop的文件系统交互的重要接口.虽然我们只是着重于HDFS的实现, ...

随机推荐

  1. DOS程序员手册(十)

    终于到(十)了~~~ 503页 ES:DI       指向未更新且未打开的FCB的指针 注释:该功能最初用来从命令行中析取文件,并以正确的格式来保存此文件 以便打开FCB.为了实现这个目的,可首先将 ...

  2. Python3基本语法

    #编码 ''' 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码: # -*- coding: cp-1252 ...

  3. 爬虫:Scrapy9 - Feed exports

    实现爬虫时最经常提到的需求就是能合适的保存爬取到的数据,或者说,生成一个带有爬取数据的“输出文件”(通常叫“输出 feed”),来供其它系统使用. Scrapy 自带了 Feed 输出,并且支持多种序 ...

  4. HDU 4472 Count (DP)

    题目:问n个节点构成完全对称的树有多少种方法. 因为树是完全对称的,所以它的子树也是完全对称的. 对于每个树,拿出一个根节点,枚举剩下的节点能拆分成多少个子树. #include <cstdio ...

  5. BETA(1)

    目录 组员情况 组员1(组长):胡绪佩 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组内最新成果 团 ...

  6. .NET Framework中的过时类型

    文章:.NET Framework 中的过时类型 url地址:https://docs.microsoft.com/zh-cn/dotnet/framework/whats-new/obsolete- ...

  7. string 与 byte[] 互转时的注意事项

    1.string 转 byte[] //为UTF8编码 byte[] midbytes=isoString.getBytes("UTF8"); //为ISO-8859-1编码,其中 ...

  8. kvm搭建完成了,那么问题来了,到底是什么原理

    kvm中到底是怎么模拟的CPU和内存? 收到了大量的 这里有一个裸的调用kvm接口的实例,超赞: http://www.cnblogs.com/Bozh/p/5753379.html 使用kvm的AP ...

  9. cf 834 E. Ever-Hungry Krakozyabra

    cf 834 E. Ever-Hungry Krakozyabra(爆搜+数位dp) 题意: 定义一种inedible tail为一个数把每一位数字按不降的顺序排列后,去掉前导0组成的序列 比如570 ...

  10. vue数组对象修改触发视图更新

    直接修改数组元素是无法触发视图更新的,如 this.array[0] = { name: 'meng', age: 22 } 修改array的length也无法触发视图更新,如 this.array. ...