基本的文件 I/O
基本的文件 I/O
抽象基类 Stream 支持读取和写入字节。Stream 集成了异步支持。其默认实现根据其相应的异步方法来定义同步读取和写入,反之亦然。
所有表示流的类都是从 Stream 类继承的。Stream 类及其派生类提供数据源和储存库的一般视图,使程序员不必了解操作系统和基础设备的具体细节。
流涉及三个基本操作:
可以从流读取。读取是从流到数据结构(如字节数组)的数据传输。
可以向流写入。写入是从数据源到流的数据传输。
流可以支持查找。查找是对流内的当前位置进行的查询和修改。
根据基础数据源或储存库,流可能只支持这些功能中的一部分。例如,NetworkStreams 不支持查找。Stream 的 CanRead、CanWrite 和 CanSeek 属性及其派生类决定不同的流所支持的操作。
有关通用 I/O 任务的列表,请参见通用 I/O 任务。
注意 |
|---|
|
Visual Basic 用户可以选择使用由 My.Computer.FileSystem 对象提供的方法和属性进行文件 I/O。有关更多信息,请参见 My.Computer.FileSystem 对象。 |
用于文件 I/O 的类
Directory 提供通过目录和子目录进行创建、移动和枚举的静态方法。DirectoryInfo 类提供实例方法。
DirectoryInfo 提供通过目录和子目录进行创建、移动和枚举的实例方法。Directory 类提供静态方法。
DriveInfo 提供访问有关驱动器的信息的实例方法。
File 提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创建 FileStream。FileInfo 类提供实例方法。
FileInfo 提供用于创建、复制、删除、移动和打开文件的实例方法,并协助创建 FileStream。File 类提供静态方法。
FileStream 支持通过其 Seek 方法随机访问文件。默认情况下,FileStream 以同步方式打开文件,但它也支持异步操作。File 包含静态方法,而 FileInfo 包含实例方法。
FileSystemInfo 是 FileInfo 和 DirectoryInfo 的抽象基类。
Path 提供以跨平台的方式处理目录字符串的方法和属性。
DeflateStream 提供使用 Deflate 算法压缩和解压缩流的方法和属性。
GZipStream 提供压缩和解压缩流的方法和属性。默认情况下,此类使用与 DeflateStream 类相同的算法,但可以扩展到使用其他压缩格式。
SerialPort 提供控制串行端口文件资源的方法和属性。
File、FileInfo、DriveInfo、Path、Directory 和 DirectoryInfo 是密封(在 Microsoft Visual Basic 中为 NotInheritable)类。可以创建这些类的新实例,但它们不能有派生类。
用于从流读取和写入流的类
BinaryReader 和 BinaryWriter 从 Streams 读取或向 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 字符输出。
通用 I/O 流类
BufferedStream 是向另一个 Stream(例如 NetworkStream)添加缓冲的 Stream。((FileStream 内部已具有缓冲,MemoryStream 不需要缓冲。)BufferedStream 可以围绕某些类型的流来构成以提高读写性能。缓冲区是内存中的字节块,用于缓存数据,从而减少对操作系统的调用次数。
CryptoStream 将数据流链接到加密转换。虽然 CryptoStream 是从 Stream 派生的,但它不属于 System.IO 命名空间,而是在 System.Security.Cryptography 命名空间中。
MemoryStream 是一个非缓冲的流,可以在内存中直接访问它的封装数据。该流没有后备存储,可用作临时缓冲区。
NetworkStream 表示网络连接上的 Stream。虽然 NetworkStream 是从 Stream 派生的,但它不属于 System.IO 命名空间,而是在 System.Net.Sockets 命名空间中。
I/O 和安全性
当在 System.IO 命名空间中使用类时,要使访问被允许,则必须满足诸如访问控制列表 (ACL) 等操作系统安全性要求。该要求是在所有 FileIOPermission 要求之外的要求。
注意 |
|---|
|
可以以编程方式管理 ACL。有关更多信息,请参见如何:添加或移除访问控制列表项和 ACL 技术概述。 |
警告 |
|---|
|
Internet 和 Intranet 的默认安全策略不允许访问文件。因此,如果您在编写将通过 Internet 下载的代码,则不要使用常规的非隔离存储 I/O 类。请改用独立存储。 |
警告 |
|---|
|
当文件或网络流打开时,只有在构造流时才执行安全检查。因此,在将这些流分发给受信度较低的代码或应用程序域时,请格外小心。 |
请参见
基本的文件 I/O的更多相关文章
- Mapreduce的文件和hbase共同输入
Mapreduce的文件和hbase共同输入 package duogemap; import java.io.IOException; import org.apache.hadoop.co ...
- mapreduce多文件输出的两方法
mapreduce多文件输出的两方法 package duogemap; import java.io.IOException; import org.apache.hadoop.conf ...
- 01.SQLServer性能优化之----强大的文件组----分盘存储
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...
- SQL Server 大数据搬迁之文件组备份还原实战
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搬迁步骤(Procedure) 搬迁脚本(SQL Codes) ...
- SQLSERVER将一个文件组的数据移动到另一个文件组
SQLSERVER将一个文件组的数据移动到另一个文件组 有经验的大侠可以直接忽视这篇文章~ 这个问题有经验的人都知道怎麽做,因为我们公司的数据量不大没有这个需求,也不知道怎麽做实验 今天求助了QQ群里 ...
- SQL Server中的高可用性(2)----文件与文件组
在谈到SQL Server的高可用性之前,我们首先要谈一谈单实例的高可用性.在单实例的高可用性中,不可忽略的就是文件和文件组的高可用性.SQL Server允许在某些文件损坏或离线的情况下,允 ...
- C# ini文件操作【源码下载】
介绍C#如何对ini文件进行读写操作,C#可以通过调用[kernel32.dll]文件中的 WritePrivateProfileString()和GetPrivateProfileString()函 ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- GreenDao 数据库:使用Raw文件夹下的数据库文件以及数据库升级
一.使用Raw文件夹下的数据库文件 在使用GreenDao框架时,数据库和数据表都是根据生成的框架代码来自动创建的,从生成的DaoMaster中的OpenHelper类可以看出: public sta ...
随机推荐
- 设计模式->观察者模式
观察者模式能非常大的减少模块之前的耦合.具体的观察者模式,客官们可以去看<设计模式>或者<Head first设计模式>等之类的书. 在java中,java.util库中封装了 ...
- [OpenGL] 1、环境搭建及最小系统
>_<: 首先推荐一个企业版的VC6.0自带OpenGL和DirectX,非常方便:http://pan.baidu.com/s/1mgIAGi8 PS: 要注意这里的OpenGL建立的工 ...
- Wijmo 2016 V2 强势发布!
Angular 2 支持 Wijmo 对 Angular 2 提供了全面的支持.我们一直在紧跟Angular 2 开发团队的步伐,对其发布的最新候选版本提供支持. 了解更多关于Angular 2 的支 ...
- AngularJS快速入门指南05:控制器
AngularJS控制器用来控制AngularJS applications的数据. AngularJS控制器就是普通的JavaScript对象. AngularJS控制器 AngularJS app ...
- 简单理解ECMAScript2015中的Promise
ECMAScript6中新增了Promise对象, 所谓Promise对象,即代表着一个还未完成,但将来某时会完成的操作(通常是异步操作).使用Promise对象,我们就可以避免陷入函数层层嵌套的‘回 ...
- Atitit.词法分析的原理 理论
Atitit.词法分析的原理 理论 1. 分词 .词法分析lexical analysis 1 1.1. 分词主要流程 1 1.2. 分词的属性如下表token 1 1.3. 词法分析器主要包括:构造 ...
- Spring基于注解及SpringMVC
1.使用注解 (1)组件扫描 指定一个包路径,Spring会自动扫描该包 及其子包所有组件类,当发现组件类定义前有 特定的注解标记时,就将该组件纳入到Spring 容器.等价于原有XML配置中的< ...
- NUnitForms 测试GUI应用程序的优秀工具
著名的NUnit是单元测试的优秀工具,但是要在一个测试方法中启动GUI程序,比如Windows Form界面,这比较难做到.NUnitForms就是为解决这个问题产生的,它是NUnit的一个扩展程序, ...
- Log4cpp介绍及使用
Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能.使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流.内存字符串队列.文件.回滚文件.调试器.Wind ...
- Objective-C 语法之 static 关键字
转:http://www.apkbus.com/android-593-1.html 学习过Java 或者 C 语言的朋友应该很清楚static关键字吧?在某个类中声明一个static 静态变量, 其 ...
注意
警告