基本的文件 I/O

基本的文件 I/O

MSDN

抽象基类 Stream 支持读取和写入字节。Stream 集成了异步支持。其默认实现根据其相应的异步方法来定义同步读取和写入,反之亦然。

所有表示流的类都是从 Stream 类继承的。Stream 类及其派生类提供数据源和储存库的一般视图,使程序员不必了解操作系统和基础设备的具体细节。

流涉及三个基本操作:

  • 可以从流读取。读取是从流到数据结构(如字节数组)的数据传输。
  • 可以向流写入。写入是从数据源到流的数据传输。
  • 流可以支持查找。查找是对流内的当前位置进行的查询和修改。

根据基础数据源或储存库,流可能只支持这些功能中的一部分。例如,NetworkStreams 不支持查找。Stream 的 CanReadCanWrite 和 CanSeek 属性及其派生类决定不同的流所支持的操作。

有关通用 I/O 任务的列表,请参见通用 I/O 任务

注意

Visual Basic 用户可以选择使用由 My.Computer.FileSystem 对象提供的方法和属性进行文件 I/O。有关更多信息,请参见 My.Computer.FileSystem 对象

用于文件 I/O 的类

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

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

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

File 提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创建 FileStreamFileInfo 类提供实例方法。

FileInfo 提供用于创建、复制、删除、移动和打开文件的实例方法,并协助创建 FileStreamFile 类提供静态方法。

FileStream 支持通过其 Seek 方法随机访问文件。默认情况下,FileStream 以同步方式打开文件,但它也支持异步操作。File 包含静态方法,而 FileInfo 包含实例方法。

FileSystemInfo 是 FileInfo 和 DirectoryInfo 的抽象基类。

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

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

GZipStream 提供压缩和解压缩流的方法和属性。默认情况下,此类使用与 DeflateStream 类相同的算法,但可以扩展到使用其他压缩格式。

SerialPort 提供控制串行端口文件资源的方法和属性。

FileFileInfoDriveInfoPathDirectory 和 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 任务

时间: 2024-08-28 13:54:20

基本的文件 I/O的相关文章

最佳vim技巧

最佳vim技巧----------------------------------------# 信息来源----------------------------------------www.vim.org         : 官方站点comp.editors        : 新闻组http://www.newriders.com/books/opl/ebooks/0735710015.html : Vim书籍http://vimdoc.sourceforge.net/cgi-bin/vim

Mac下获取AppStore安装包文件路径

本文介绍了Mac下如何找到AppStore下载的安装包路径,以及如何提取出来供以后使用的相关步骤,希望对大家有所帮助. 通过远在大洋彼岸的苹果服务器下载东西,确实有够慢啊!AppStore更甚:甚至都经常提示连不上服务器,而有些软件呢,还必须从AppStore下载安装,所以没办法,谁让上了苹果的贼船呢!公司的网速更是不敢恭维,以至于基本上不下东西,除非像这次一样:手贱的把iPhone6升级到8.2.2了,然后Xcode6.1.1真机调试不成了,所以需要下个Xcode6.2.昨天刚更新的Xcode

微信文件传输助手文件夹在哪?一起来找找

微信文件传输助手是微信电脑版与手机微信之间相互传输图片等文件的好工具,但很多童鞋都找不到微信文件传输助手文件夹在哪,就让我们一起找找吧 1.先说说手机微信文件传输助手文件夹在哪吧 文件夹路径为/Tencent/MicroMsg/Download/ 2.电脑版微信文件传输助手文件夹在:/微信安装保存目录/wechat files/微信号/ 也可以点击接收到的图片下载保存到相应位置即可

GitHub限制上传大于100M的单个大文件

工作中遇到这个问题,一些美术资源..unitypackage文件大于100M,Push到GitHub时被拒绝.意思是Push到GitHub的每个文件的大小都要求小于100M. 搜了一下,很多解决办法只是把这些超过100M的大文件从本地版本库中移除,使得Push可以成功.但这并没有解决如何上传大文件到GitHub的问题. 解决办法是使用Git LFS. 用法参考:http://blog.csdn.net/tyro_java/article/details/53440666 按照以上方法设置好后,就

Linux 将文件夹下的所有文件复制到另一个文件里

如何将文件夹/home/work下的文件复制到/home/temp里面? 使用命令: cp -R /home/work/* /home/temp *表示所有文件 但是/home/work 下的隐藏文件都不会被拷贝 更好的复制的方法是用"."代替"*"就好了. cp -R /home/work/.  /home/temp 将一个文件夹复制到另一个文件夹下,例如将/home下的work文件夹复制到temp下面 命令为: cp -R /home/work  /home/t

Maven中,pom.xml文件报错

一:错误消息,如下图: aus 原因是本地仓库在org.codehaus.plexus:plexus-uils:pom:3.0.20下面没有jar文件,只有一个plexus-utils-3.0.20.pom.lastUpdated,如下图: 解决:将该文件夹删掉,然后右击项目:Maven->Update Project就可以了 若pom.xml里面还有类型的报错,就像这样解决就OK了

java读文件

java.io.*; public abstract class Reader implements Readable,Closeable{}     public class BufferedReader extends Reader{         public BufferedReader(Reader in);创建一个使用默认大小输入缓冲区的缓冲字符输入流.         public BufferedReader(Reader in, int sz);创建一个使用指定大小输入缓冲区

PHP拷贝目录下的所有文件

//目录拷贝函数到任意目录function dir1($filename,$dest){ static $dirname; $dirname.=$dest; //连接头(第一层目录) static $dir; //中间变量 if(file_exists($filename)){ //如果文件存在 if(is_dir($filename)){ //如果是目录,则先创建目录然后遍历 $dirnames=basename($filename); //取最后的目录或者文件名,链接到要转移到的第一层目录

万家报账平台没有“上传文件”按钮的解决办法

在有的电脑没有"上传文件"的按钮? 第一步:首先检查浏览器设置. 第二步:找到IE的Internet选项菜单,开启菜单栏的根据下列方面找,如下图: 第三步:找到Internet选项后,点击,选择安全选项卡,并点击"自定义级别" 第四步:找到"将文件上载到服务器时包含本地目录路径"选择"启用".然后点击确定关闭IE,重启打开. 第五步:更新浏览器的flash版本.在百度中搜索"flash player官网"即

通过jQuery Ajax使用FormData对象上传文件

转自:http://www.cnblogs.com/labnizejuly/p/5588444.html FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单". <form id="uploadForm" enctype="multipart/form-data"> <input id="file" type="file"