C#进阶-文件处理IO

文件

文件是一些具有永久存储及特定顺序的字节组成的一个有序的、具有名称的集合。

在各种介质上(可移动磁盘、硬盘、CD 等)存储的集合数据。

通常情况下文件按照树状目录进行组织,每个文件都有文件名、文件所在路径、创建时间、访问权限等属性。

流提供了连续的字节流存储空间,虽然数据实际存储的位置可能不连续,甚至可以分布在多个磁盘上,但我们看到的是封装以后的数据结构,是连续的字节流抽象结构。

除了和磁盘文件直接相关的文件流以外,流有多种类型,流可以分布在网络中,内存中或者是磁带中。

流的分类:

数据流向:输入流 输出流

读写单位:字节流 字符流

数据源:文件流 网络流 对象流(二进制流)

功能:结点流(原始流) 装饰流(过滤流)

IO 命名空间

包含便于在数据流和文件中读取和写入数据的类

IO 命名空间中用于文件目录操作类

System.IO命名空间下提供了三种操作目录的类:

Directory 静态类提供通过目录和子目录进行创建、移动和删除等静态方法。

DirectoryInfo 提供通过目录和子目录进行创建、移动和删除等实例方法。

Path 静态类的成员使您可以快速方便地对文件或目录路径信息的String实例,执行常见静态操作方法。例如:确定文件扩展名是否是路径的一部分,以及将两个字符串组合成一个路径名。

类 名    说明

File 提供用于创建、复制、删除、移动和打开文件的静态方法,

并协助创建 FileStream。FileInfo 类提供实例方法。

Directory 提供通过目录和子目录进行创建、移动和枚举的静态方法。

DirectoryInfo类提供实例方法

FileInfo 提供用于创建、复制、删除、移动和打开文件的实例方法,

并协助创建 FileStream。File 类提供静态方法。

DirectoryInfo 提供通过目录和子目录进行创建、移动和枚举的实例方法。

Directory 类提供静态方法。

FileSystemInfo FileInfo和DirectoryInfo的抽象基类。

Path 提供以跨平台的方式处理目录字符串的方法和属性。

DriveInfo 提供访问有关驱动器的信息的实例方法。

FileStream 支持通过其Seek方法随机访问文件。

默认情况下,FileStream 以同步方式打开文件,

但它也支持异步操作。File 包含静态方法,而FileInfo包含实例方法。

DeflateStream 提供使用Deflate算法压缩和解压缩流的方法和属性。

GZipStream 提供压缩和解压缩流的方法和属性。默认情况下,

此类使用与DeflateStream 类相同的算法,

但可以扩展到使用其他压缩格式。

BinaryReader 从Streams读取编码的字符串和基元数据类型。

BinaryWriter 或向Streams写入编码的字符串和基元数据类型。

StreamReader 通过使用Encoding进行字符和字节的转换,从Streams中读取字符。StreamReader具有一个构造函数,该构造函数根据是否存在专用于Encoding的preamble(例如一个字节顺序标记)来确定给定Stream的正确Encoding是什么。

StreamWriter 通过使用Encoding将字符转换为字节,向Streams写入字符。

StringReader 从Strings中读取字符。StringReader允许您用相同的API来处理Strings,因此您的输出可以是String或以任何编码表示的Stream。

StringWriter 向Strings写入字符。StringWriter允许您用相同的API来处理Strings,因此您的输出可以是String或以任何编码表示的Stream。

TextReader StreamReader和StringReader的抽象基类。抽象Stream类的实现用于字节输入和输出,而TextReader的实现用于Unicode字符输出

TextWriter StreamWriter和StringWriter的抽象基类。抽象Stream类的实现用于字节输入和输出,而TextWriter的实现用于Unicode字符输出。

BufferedStream 向另一个 Stream(例如 NetworkStream)添加缓冲的 Stream。(FileStream内部已具有缓冲,MemoryStream 不需要缓冲。)

BufferedStream 可以围绕某些类型的流来构成以提高读写性能。缓区是内存中的字节块,用于缓存数据,从而减少对操作系统的调用次数。

MemoryStream 一个非缓冲的流,可以在内存中直接访问它的封装数据。该流没有后备存储,可用作临时缓冲区。

NetworkStream 表示网络连接上的 Stream。虽然 NetworkStream 是从 Stream 派生的,但它不属于 System.IO 命名空间,而是在 System.NET.Sockets 命名空间中。

递归目录

如何获得某个盘符或者路径下的所有目录和子目录的信息呢?

using System;

using System.IO;

public class Files

{

//将string 改变为DirectoryInfo

   public static void dispDirs(DirectoryInfo dir)

   {

       Console.WriteLine("{0}", dir.FullName);

//返回目录中的目录列表对象

       DirectoryInfo[] directories = dir.GetDirectories();

       foreach (DirectoryInfo dirX in directories)

       {

            dispDirs(dirX);

       }

   }

public static void Main(String[] args)

{  

//保存目录存在

       DirectoryInfo dir = new DirectoryInfo("D:\\TOOLS");

       if (dir.Exists)

{

           dispDirs(dir);

}

       else

{

           Console.WriteLine("访问目录不存在!");

}

       Console.Read();

   }

}

文件管理

File类通常和FileStream类协作来完成对文件的创建、删除、拷贝、移动、打开等操作。

File类提供的静态方法主要有Create、Copy、Move、Delete、GetLastAccessTime 等,利用它们可以完成一些基本的文件管理。

也可以通过FileInfo类来实现同样的操作。

字节流

Stream类提供以一种特定的编码从数据源头中读取字节。

FileStream类提供以一种特定的编码从文件中读取字节。

字节流的特点:

和数据源交互 直接获取数据源的字节数据

一般名称都是:XXXStream 全部都是Stream的子类

文件流获得:

通过File类中的Open、OpenRead、OpenWrite获得

通过构造的方式new出来

文件的读取和写入:

1  创建一个文件用于读写

2  产生文件字节流对象

3  Write\WriteByte写入

4  Read\ReadByte进行读取

字符流

StreamReader和StreamWriter类提供以一种特定的编码从字节流中读取字符。

字符流获得:

通过File类获取

使用构造new

注意:

文件的读取和写入

1  创建文件用于读写文本

2  产生字节流连接至文件

3  产生字符流连接至2产生的字节流

4  按行(ReadLine/WriteLine)按字符(Read\Write)读写文件即可

二进制流

BinaryReader 和BinaryWriter 类,用于按二进制模式读写文件。

它们提供的一些读写方法是对称的,比如针对不同的数据结构,BinaryReader提供了ReadByte、ReadBoolean、ReadInt、ReadInt16、ReadDouble、ReadString等方法,而BinaryWriter 则提供了重载了17次的Write 方法。

BinaryReader读取数据所用方法必须和BinaryWriter写入数据所用方法对应。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容