Net 文件和流 I/O
文件和流 I/O
- 2017/03/30
文件和流 I/O(输入/输出)是指在存储媒介中传入或传出数据。 在 .NET Framework 中,System.IO 命名空间包含允许以异步方式和同步方式对数据流和文件进行读取和写入操作的类型。 这些命名空间还包含对文件执行压缩和解压缩的类型,以及通过管道和串行端口启用通信的类型。
文件是一个由字节组成的有序的命名集合,它具有永久存储。 在处理文件时,你将处理目录路径、磁盘存储、文件和目录名称。 相反,流是一个字节序列,可用于对后备存储进行读取和写入操作,后备存储可以是多个存储媒介之一(例如,磁盘或内存)。 正如存在除磁盘之外的多种后备存储一样,也存在除文件流之外的多种流(如网络、内存和管道流)。
文件和目录
你可以使用 System.IO 命名空间中的类型与文件和目录进行交互。 例如,你可以获取和设置文件和目录的属性,并基于搜索条件检索文件和目录的集合。
若要深入了解 Windows 系统中的路径命名约定和 文件路径的表示方式,包括在 .NET Core 1.1 及更高版本和 .NET Framework 4.6.2 及更高版本中支持的 DOS 设备语法,请参阅 Windows 系统中的文件路径格式。
下面是一些常用的文件和目录类:
File - 提供用于创建、复制、删除、移动和打开文件的静态方法,并可帮助创建 FileStream 对象。
FileInfo - 提供用于创建、复制、删除、移动和打开文件的实例方法,并可帮助创建 FileStream 对象。
Directory - 提供用于创建、移动和枚举目录和子目录的静态方法。
DirectoryInfo - 提供用于创建、移动和枚举目录和子目录的实例方法。
Path - 提供用于以跨平台的方式处理目录字符串的方法和属性。
调用文件系统方法时,应始终提供强大的异常处理。 有关更多信息,请参阅处理 I/O 错误异常。
除了使用这些类之外,Visual Basic 用户还可以对文件 I/O 使用 Microsoft.VisualBasic.FileIO.FileSystem 类提供的方法和属性。
请参阅如何:复制目录、如何:创建目录列表和如何:枚举目录和文件。
流
抽象基类 Stream 支持读取和写入字节。 所有表示流的类都继承自 Stream 类。 Stream 类及其派生类提供数据源和存储库的常见视图,使程序员不必了解操作系统和基础设备的具体细节。
流涉及三个基本操作:
读取 - 将数据从流传输到数据结构(如字节数组)中。
写入 - 将数据从数据源传输到流。
查找 - 对流中的当前位置进行查询和修改。
根据基础数据源或存储库,流可能只支持这些功能中的一部分。 例如,PipeStream 类不支持查找。 流的 CanRead、CanWrite 和 CanSeek 属性指定流支持的操作。
下面是一些常用的流类:
FileStream - 用于对文件进行读取和写入操作。
IsolatedStorageFileStream - 用于对独立存储中的文件进行读取或写入操作。
MemoryStream - 用于作为后备存储对内存进行读取和写入操作。
BufferedStream - 用于改进读取和写入操作的性能。
NetworkStream - 用于通过网络套接字进行读取和写入。
PipeStream - 用于通过匿名和命名管道进行读取和写入。
CryptoStream - 用于将数据流链接到加密转换。
有关异步使用流的示例,请参阅异步文件 I/O。
读取器和编写器
System.IO 命名空间还提供用于在流中读取和写入已编码字符的类型。 通常,流用于字节输入和输出。 读取器和编写器类型处理编码字符与字节之间的来回转换,以便流可以完成操作。 每个读取器和编写器类都与流关联,可以通过类的 BaseStream 属性进行检索。
下面是一些常用的读取器和编写器类:
BinaryReader 和 BinaryWriter - 用于将基元数据类型作为二进制值进行读取和写入。
StreamReader 和 StreamWriter - 用于通过使用编码值在字符和字节之间来回转换来读取和写入字符。
StringReader 和 StringWriter - 用于从字符串读取字符以及将字符写入字符串中。
TextReader 和 TextWriter - 用作其他读取器和编写器(读取和写入字符和字符串,而不是二进制数据)的抽象基类。
请参阅如何:从文件读取文本、如何:向文件写入文本、如何:从字符串中读取字符和如何:向字符串写入字符。
异步 I/O 操作
读取或写入大量数据会占用大量资源。 如果你的应用程序需要保持对用户的响应性,则你应异步执行这些任务。 在执行同步 I/O 操作时,UI 线程将受阻,直至完成占用大量资源的操作。 在开发 Windows 8.x 应用商店应用时,使用异步 I/O 操作可防止造成应用已停止工作的印象。
异步成员在其名称中包含 Async,如 CopyToAsync、FlushAsync、ReadAsync 和 WriteAsync 方法。 你可以将这些方法与 async 和 await 关键字一起使用。
有关详细信息,请参阅异步文件 I/O。
压缩
压缩是指减小文件大小以便存储的过程。 解压缩是提取压缩文件的内容以使这些内容采用可用格式的过程。 System.IO.Compression命名空间包含用于对文件和流进行压缩或解压缩的类型。
在对文件和流进行压缩和解压缩时,经常使用以下类:
ZipArchive - 用于在 zip 存档中创建和检索条目。
ZipArchiveEntry - 用于表示压缩文件。
ZipFile - 用于创建、提取和打开压缩包。
ZipFileExtensions - 用于创建和提供压缩包中的条目。
DeflateStream - 用于使用 Deflate 算法对流进行压缩和解压缩。
GZipStream - 用于采用 gzip 数据格式对流进行压缩和解压缩。
请参阅如何:压缩和解压缩文件。
Net 文件和流 I/O的更多相关文章
- C#文件与流(FileStream、StreamWriter 、StreamReader 、File、FileInfo、Directory、directoryInfo、Path、Encoding)
(FileStream.StreamWriter .StreamReader .File.FileInfo.Directory.DirectoryInfo.Path.Encoding) C#文 ...
- 【转载】C++的文件和流
http://www.iteedu.com/plang/ccpp/cppdxjch2b/111.php C++语言把每一个文件都看成一个有序的字节流(见图14.2),每一个文件或者以文件结束符(end ...
- Java - 文件(IO流)
Java - 文件 (IO) 流的分类: > 文件流:FileInputStream | FileOutputStream | FileReader | FileWriter ...
- Java IO 文件与流基础
Java IO 文件与流基础 @author ixenos 摘要:创建文件.文件过滤.流分类.流结构.常见流.文件流.字节数组流(缓冲区) 如何创建一个文件 #当我们调用File类的构造器时,仅仅是在 ...
- c# 文件与流
1.创建和删除目录 在c#中涉及到输入.输出(i/o)相关操作的API都被放在System.IO命名空间下,或者子命令System.IO.IsolatedStoorage中.对目录进行操作可以使用Di ...
- C++ 文件和流
到目前为止,我们已经使用了 iostream 标准库,它提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流. 本教程介绍如何从文件读取流和向文件写入流.这就需要用到 C++ ...
- netframework转core时文件响应流问题
做将framework webapi项目转成netcore平台上的webapi项目时,发现原来的返回文件响应流在netcore平台下失效.代码如下,返回pdf文件响应流,供前端显示 /// <s ...
- (C/C++学习笔记) 二十. 文件和流
二十. 文件和流 ● 文件的概念 文件(file) 一. C/C++语言将文件作为字节序列(sequence of characters)来对待,但从编码角度,或说从对字节信息的解释来看,文件分为:文 ...
- 进阶系列(4)—— C#文件与流
一. 驱动器 在Windows操作系统中,存储介质统称为驱动器,硬盘由于可以划分为多个区域,每一个区域称为一个驱动器..NET Framew ork提供DriveInfo类和 DriveType枚 ...
- [19/03/30-星期六] IO技术_四大抽象类_ 字节流( 字节输入流 InputStream 、字符输出流 OutputStream )_(含字节文件缓冲流)
一.概念及分类 InputStream(输入流)/OutputStream(输出流)是所有字节输入输出流的父类 [注]输入流和输出流的是按程序运行所在的内存的角度划分的 字节流操作的数据单元是8的字节 ...
随机推荐
- 对Sting类型的探讨
string类型经常和基本数据类型一起被我们熟练运用,但却不被归为基本数据类型,他是特殊的引用类型.引用数据类型还有类,接口.数组.枚举类型和注解类型. 我们来看下jdk对他的解释: String是在 ...
- Jmeter的代理和cookie/session/Token令牌认证
Jmeter的代理服务器 1.启动Jmeter: 2.“测试计划”中添加“线程组”: 3.“工作台”中添加“HTTP代理服务器”: 4.配置代理服务器:Global Settings下面的端口配置:9 ...
- js差异化继承
var parentObj={ name:"123456", get_name:function(){ return this.name; }, says:function(){ ...
- 《剑指offer》算法题第六天
今日题目: 顺时针打印矩阵 包含min函数的栈 栈的压入.弹出序列 从上到下打印二叉树 二叉树搜索树的后序遍历序列 二叉树中和为某一值的路径 今天的题目都比较简单,下面一一介绍: 1. 顺时针打印矩阵 ...
- cookbook 6.1 温标的转换
任务: 在开氏温度(Kelvin).摄氏度(Celsius).华氏温度(Fahrenheit).兰金温度(Rankine)之间做转换 解决方案: #coding=utf-8 class Tempera ...
- #7 div2 B Layer Cake 造蛋糕 智商题+1
B - Layer Cake Time Limit:6000MS Memory Limit:524288KB 64bit IO Format:%I64d & %I64u Sub ...
- POI2012 BEZ-Minimalist Security | noi.ac #537 Graph
题目链接:戳我 首先注意这张图有可能不连通!! 然后我们考虑对于每一个联通块,首先任意确定一个点,给它设最终值为x,然后进行搜索.(因为对于一个联通块而言,我们知道一个点的最终值,那么整个联通块上面点 ...
- 嵌入式实时操作系统VxWorks入门――开发环境构建[转]
VxWorks 操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),它以其良好的可靠性和卓越的实时性被广泛地应用在通 信.军事.航空.航天等高精尖技术及实时性 ...
- Android 内存 - 获取单个应用内存限制
方法一: adb shell getprop | grep dalvik.vm.heapgrowthlimit [dalvik.vm.heapgrowthlimit]: [64m] 方法二: Acti ...
- Kamil and Making a Stream
E. Kamil and Making a Stream 参考:Codeforces Round #588 (Div. 2)-E. Kamil and Making a Stream-求树上同一直径上 ...