jsp购物网站开发,软件下载网站如何履行安全,wordpress 登陆后台,湖南基础建设投资集团网站本文内容 流 Stream 和基本操作 用于 I/O 的类 通用 I/O Stream 类 I/O 与安全 演示 如何向文本文件写入字符串如何从文本文件读取字符串如何读取数据文件如何向字符串写入字符如何从字符串读取字符参考资料修改记录2008 年毕业时#xff0c;在解决问题时#xff0c;第一反映…本文内容 流 Stream 和基本操作 用于 I/O 的类 通用 I/O Stream 类 I/O 与安全 演示 如何向文本文件写入字符串 如何从文本文件读取字符串 如何读取数据文件 如何向字符串写入字符 如何从字符串读取字符 参考资料 修改记录 2008 年毕业时在解决问题时第一反映是—— baidu 或 google 一下身边的很多人都是这么说的。当然也有人说微软 MSDN 是个好东西虽然我当时也知道这点但对于一个没有多少项目经验的人来说使用 MSDN 的确有些困难。因为你不知道如何在 MSDN 中找到解决问题的办法换句话说MSDN 不可能直接告诉你你的问题如何解决。 但 MSDN 对于一个求知欲强、善于思考、提升编程能力的人来说是不可或缺的。网上的东西永远只是事物的一个侧面而 MSDN 却是知识的一个体系。我希望你能明白我的意思这就好像“信息”和“知识”的区别。“信息”只有经过你自己汇总、比较、反思无数次的假设和无数次的否定才能成为“知识”——自己的东西。 凡事都有第一次我最初使用 MSDN 也是迫于无奈。一是有意识地去使用 MSDN再就是因为涉密客户那不允许上网。在这样的情况下我开始使用 MSDN。通过它的链接你可以学习到相关的所有问题加深对知识的理解。 下面就要开始我的问题——.NET I/O 操作。 System.IO 命名空间下有四种类型的逻辑组 获取文件和目录的相关信息执行与文件和目录相关的基本操作 在路径名上执行基本字符串的操作 在数据流和文件上进行读写操作 当给定的目录树上文件和文件夹发生动态变化时获取相关通知。 本文主要说明前三个。 抽象基类 Stream 支持读写字节。Stream 集成了异步支持。它默认的实现对相应的异步方法定义了同步读写反之亦然。 所有关于流Stream的类都是从 Stream 类继承的。Stream 类和其子类提供了数据源和存储的通用视图独立于操作系统和底层设备的细节。 流 Stream 和基本操作 .NET System.IO 提供了对两种截然不同类型的数据——流和文件。文件是在磁盘上持久保存的、有序的并且已命名的字节集合。流代表从数据存储区中读取的或要写入数据存储区的字节块流可以是基于多种存储媒体的。所以流是文件的超集。 Stream 类支持三种基本操作 1. 读是将数据从流中读取到数据结构中保存如一个字节数组。 2. 写是将数据结构中的数据写入流中。 3. 搜索。包括查询和修改流中当前的位置。 根据底层数据源或存储流可能只支持上面这些功能。例如NetworkStreams 不支持定位seek这是显而易见的。Stream 及其子类的 CanRead、CanWrite、和 CanSeek 属性确定各种流支持的操作。 用于 I/O 的类 1. Directory 全局静态类提供创建目录、复制目录、移动目录和枚举目录中的文件子目录的静态方法。DirectoryInfo 类提供相应的实例方法。 2. DirectoryInfo 类Directory 类提供的是静态方法而 DirectoryInfo 类提供的实例方法。 3. File 全局静态类提供创建文件、复制文件、删除文件、移动文件、打开文件的静态方法并且帮助创建一个 FileStream 对象。FileInfo 类提供实例方法。 4. FileInfo 类File 类提供的是静态方法而 FileInfo 类提供的是实例方法。但他们的内部实现和编程接口上是有区别的。 5. DriveInfo 类提供访问驱动器信息的实例方法。 6. FileStream 类通过Seek方法支持随机访问文件。默认情况下FileStream 异步打开文件但也支持同步操作。File 包含静态方法而 FileInfo 则包含实例方法。 7. FileSystemInfo 是抽象类FileInfo 和DirectoryInfo 类继承该类。 8. Path 类提供的方法和属性用于以跨平台的方式处理目录字符串。 9. DeflateStream 类提供的方法和属性使用 Deflate 算法压缩和解压流。 10. GZipStream 类也是压缩和解压流。默认情况下这个类和 DeflateStream 一样但是可以扩展使用其他压缩格式。 11. SerialPort 类提供的方法和属性用于控制一个串口文件资源。 类 File、FileInfo、DriveInfo、Path、Directory 和 DirectoryInfo 都是密封类你可以创建这些类的实例但它们不能被继承。 12. BinaryReader 和 BinaryWriter 类从流读写编码的字符串和基础数据类型。 13. StreamReader 类通过 Encoding 把字符转换成字节从流中读取字符串。StreamReader 有一个构造函数尝试确定一个给定流的正确 Encoding。这是基于一个特定编码序言例如一个字节顺序标记。 14. StreamWriter 类通过 Encoding 把字符转换成字节像流中写入字符。 15. StringReader 类从字符串读取字符。StringReader 允许你用相同的 API 来对待字符串因此你的输出可以是一个任意编码的流或是一个字符串。 16. StringWriter 类把字符写入到字符串。StringWriter 允许你用相同的 API 来对待字符串因此你的输出可以是一个任意编码的流或是一个字符串。 17. TextReader 类是抽象类StreamReader 和 StringReader 继承该类。抽象的 Stream 类的实现是为了字节的输入和输出设计的而 TextReader 的实现是为 Unicode 字符输出设计的。 18. TextWriter 类是抽象类StreamWriter 和 StringWriter 继承该类。抽象的 Stream 类的实现是为了字节的输入和输出设计的而 TextWriter 的实现是为 Unicode 字符输入设计的。 通用 I/O Stream 类 1. BufferedStream 类将一个缓冲区添加到另一个流中比如网络流 NetworkStream。FileStream 已经进行了内部缓冲MemoryStream 不需要缓冲BufferedStream 可以有很多类型的流组成以提高读写性能。缓冲区是内存中的一个块字节用于缓存数据从而减少了操作系统的调用次数。 2. CryptoStream 类将数据流链接到加密转换的流。尽管它继承了 Stream但是并不在 System.IO 命名空间而是在 System.Security.Cryptography 里。 3. MemoryStream 类是一个非缓冲的流它封装的数据在内存中可以直接访问。这个流没有后备存储作为一个临时缓冲很有用。 4. NetworkStream 类是一个网络连接的流。尽管它继承了 Stream 类但是它并不在 System.IO 命名空间而是在 System.Net.Sockets 里。 I/O 与安全 当使用 System.IO 命名空间中的类时允许的访问必须满足操作系统的安全需要如访问控制列表ACL。这个需求除了任何 FileIOPermission 需要的。 备注ACL 可以由程序管理。For more information, see How to: Add or Remove Access Control List Entries and ACL Technology Overview. 注意Internet 和 intranet 默认的安全策略不允许访问文件。因此如果你编写需要通过网络下载的代码就不能使用正规的非隔离存储nonisolated storage I/O 类而应该使用隔离存储Isolated Storage。 当打开一个文件或是网络流安全检查只有在流构造时才会进行。因此当向不太受信任的代码或是应用程序域提交这些流是应该谨慎。 以上就是基本文件 I/O 操作的相关类看过之后你多半还是有些迷糊但你至少已经知道文件 I/O 涉及了哪些方面如读、写、字节数组、字符串、文件还有访问控制列表这些“关键字”就是信息之后就要靠你自己把这些信息形成一个体系——文件 I/O。MSDN 给出了几个完整的例子比如如何读写二进制文件如何读写文本文件如何读写字符串等等我觉得不错。 演示 如何向文本文件写入字符串 例一演示如何向一个已经存在的文件添加文本例二演示如何创建一个新的文件并向它写入一个字符串。WriteAllText 方法也提供类似的功能。 例一 using System; using System.IO; class Test { public static void Main() { using (StreamWriter sw new StreamWriter(TestFile.txt)) { sw.Write(This is the ); sw.WriteLine(header for the file.); sw.WriteLine(-------------------); sw.Write(The date is: ); sw.WriteLine(DateTime.Now); } } } 例二 using System; using System.IO; public class TextToFile { private const string FILE_NAME MyFile.txt; public static void Main(String[] args) { if (File.Exists(FILE_NAME)) { Console.WriteLine({0} already exists., FILE_NAME); return; } using (StreamWriter sw File.CreateText(FILE_NAME)) { sw.WriteLine (This is my file.); sw.WriteLine (I can write ints {0} or floats {1}, and so on., 1, 4.2); sw.Close(); } } } 如何从文本文件读取字符串 第二个例子添加了检测文件结束。通过 ReadAll() 和 ReadAllText() 方法能实现同样的功能。 例一 using System; using System.IO; class Test { public static void Main() { try { using (StreamReader sr new StreamReader(TestFile.txt)) { String line; while ((line sr.ReadLine()) ! null) { Console.WriteLine(line); } } } catch (Exception e) { Console.WriteLine(The file could not be read:); Console.WriteLine(e.Message); } } } 例二 using System; using System.IO; public class TextFromFile { private const string FILE_NAME MyFile.txt; public static void Main(String[] args) { if (!File.Exists(FILE_NAME)) { Console.WriteLine({0} does not exist., FILE_NAME); return; } using (StreamReader sr File.OpenText(FILE_NAME)) { String input; while ((inputsr.ReadLine())!null) { Console.WriteLine(input); } Console.WriteLine (The end of the stream has been reached.); sr.Close(); } } } 如何读取数据文件 BinaryReader 和 BinaryWriter 类用来读写数据而不是字符串。下面的例子演示读写数据。 using System; using System.IO; class MyStream { private const string FILE_NAME Test.data; public static void Main(String[] args) { if (File.Exists(FILE_NAME)) { Console.WriteLine({0} already exists!, FILE_NAME); return; } FileStream fs new FileStream(FILE_NAME, FileMode.CreateNew); BinaryWriter w new BinaryWriter(fs); for (int i 0; i 11; i) { w.Write( (int) i); } w.Close(); fs.Close(); fs new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read); BinaryReader r new BinaryReader(fs); for (int i 0; i 11; i) { Console.WriteLine(r.ReadInt32()); } r.Close(); fs.Close(); } } 说明如果 Test.data 文件在当前目录已经存在会抛出 IOException 异常。 如何向字符串写入字符 下面的例子演示用 StringWriter 类向一个字符串写入字符数组中的字符。 using System; using System.IO; using System.Text; public class CharsToStr { public static void Main(String[] args) { StringBuilder sb new StringBuilder(Some number of characters); char[] b { ,t,o, ,w,r,i,t,e, ,t,o,.}; StringWriter sw new StringWriter(sb); sw.Write(b, 0, 3); Console.WriteLine(sb); sw.Close(); } } 如何从字符串读取字符 下面的例子演示用StringRead类从字符串读取字符。 using System; using System.IO; public class CharsFromStr { public static void Main(String[] args) { String str Some number of characters; char[] b new char[24]; StringReader sr new StringReader(str); sr.Read(b, 0, 13); Console.WriteLine(b); sr.Close(); } } 参考资料 System.IO 命名空间MSDN 文件和流 I/OMSDN 文件 I/OC#与JavaMSDN 异步文件 I/OVS 2012 使用 Async 和 Await 的 异步编程 修改记录 2015-1-17 [add] 转载于:https://www.cnblogs.com/liuning8023/archive/2011/08/28/2156546.html