C#中的文件处理(2)

来源:互联网 发布:python粒子群算法包 编辑:程序博客网 时间:2024/05/29 07:37

原文地址:http://www.dingos.cn/index.php?topic=1408.0

【NetworkStream 类】提供用于网络访问的基础数据流。位于 System.Net.Sockets 命名空间中。
NetworkStream 类提供在阻止模式下通过 Stream 套接字发送和接收数据的方法。可以在同步和异步数据传输时使用 NetworkStream 类。
若要创建 NetworkStream,必须提供连接的 Socket。也可指定 NetworkStream 对所提供的 Socket 具有哪些 FileAccess 权限。默认情况下,关闭 NetworkStream 并不会关闭所提供的 Socket。如果希望 NetworkStream 具有关闭所提供的 Socket 的权限,必须将 ownsSocket 参数的值指定为 true。
将 Write 和 Read 方法用于简单的单线程同步阻止 I/O。若要使用不同的线程来处理 I/O,则请考虑使用 BeginWrite 和 EndWrite 方法,或 BeginRead 和 EndRead 方法进行通信。
NetworkStream 不支持对网络数据流的随机访问。CanSeek 属性用于指示流是否支持查找,它的值始终为 false;读取 Position 属性、读取 Length 属性或者调用 Seek 方法都会引发 NotSupportedException。

【CryptoStream 类】定义将数据流链接到加密转换的流。以便进行数据加密。位于 System.Security.Cryptography 命名空间中。
公共语言运行库使用面向流的设计进行加密。该设计的核心是 CryptoStream。实现 CryptoStream 的任何加密对象可以和实现 Stream 的任何对象链接起来,因此一个对象的流式处理输出可以馈送到另一个对象的输入。不需要分别存储中间结果(第一个对象的输出)。
通过调用 Close 方法完成 CryptoStream 对象的使用后,始终应该显式关闭该对象。 这会刷新流并使所有剩余的数据块都被 CryptoStream 对象处理。 但是,如果在调用 Close 方法前发生了异常,CryptoStream 对象可能会关闭。 为确保 Close 方法始终被调用,请在 try/catch 语句的 finally 块中放置 Close 方法调用。

using System;
using System.IO;
using System.Security.Cryptography;

public class StreamTest{
    public static void Main(){
        MemoryStream memstr = new MemoryStream();
        memstr.WriteByte((byte)1);
        memstr.Position = 0;
        FileStream desfile = new FileStream("Test1.cs", FileMode.OpenOrCreate,
                FileAccess.Write);
        desfile.SetLength(0);
        SymmetricAlgorithm des = SymmetricAlgorithm.Create();
        byte[] bin = new byte[4096];
        long readlen = 9;
        long totallen = (long)memstr.Length;
        int len;
        CryptoStream encStream = new CryptoStream(desfile, des.CreateEncryptor(),
        CryptoStreamMode.Write);
        Console.WriteLine("正在加密...");
        while(readlen < totallen){
            len = memstr.Read(bin, 0, 4096);
            encStream.Write(bin, 0, len);
            readlen = (readlen +((len / des.BlockSize) * des.BlockSize));
        }
        encStream.Close();
    }
}
该文件中的数据已经被加密。每次执行该程序并打开文件 Test1.cs 时,其中的数据都以不同的形式加密。

【File 类】提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创建 FileStream 对象。
将 File 类用于典型的操作,如复制、移动、重命名、创建、打开、删除和追加到文件。也可将 File 类用于获取和设置文件属性或有关文件创建、访问及写入操作的 DateTime 信息。
许多 File 方法在您创建或打开文件时返回其他 I/O 类型。可以使用这些其他类型进一步处理文件。
由于所有的 File 方法都是静态的,所以如果只想执行一个操作,那么使用 File 方法的效率比使用相应的 FileInfo 实例方法可能更高。所有的 File 方法都要求当前所操作的文件的路径。
File 类的静态方法对所有方法都执行安全检查。如果打算多次重用某个对象,可考虑改用 FileInfo 的相应实例方法,因为并不总是需要安全检查。
默认情况下,将向所有用户授予对新文件的完全读/写访问权限。

【File类常见方法】
  • Copy
    将现有文件复制到新文件。
  • Create
    在指定路径中创建文件。
  • Delete
    删除指定的文件。如果指定的文件不存在,则不引发异常。
  • Exists
    确定指定的文件是否存在。
  • Move
    将指定文件移到新位置,并提供指定新文件名的选项。

【Directory 类】公开用于创建、移动和枚举通过目录和子目录的静态方法。无法继承此类。
将 Directory 类用于典型操作,如复制、移动、重命名、创建和删除目录。也可将 Directory 类用于获取和设置与目录的创建、访问及写入操作相关的 DateTime 信息。
由于所有的 Directory 方法都是静态的,所以如果只想执行一个操作,那么使用 Directory 方法的效率比使用相应的 DirectoryInfo 实例方法可能更高。大多数 Directory 方法要求当前操作的目录的路径。
Directory 类的静态方法对所有方法都执行安全检查。如果打算多次重用某个对象,可考虑改用 DirectoryInfo 的相应实例方法,因为并不总是需要安全检查。

【Directory类常见方法】
  • CreateDirectory
    创建指定路径中的所有目录。
  • Delete
    删除指定的目录。
  • Exists
    确定给定路径是否引用磁盘上的现有目录。
  • Move
    将文件或目录及其内容移到新位置。

【Directory和File示例】
using System;
using System.IO;
class Test{
    static void Main(string[] args){
        Directory.CreateDirectory("C#");
        File.Copy("Test1.cs","C#//Test2.cs");
        Console.WriteLine("已复制文件内容");
    }
}
使用Directory类在当前路径下创建了一个名为“C#”的目录,使用File类将文件Test1.cs的内容复制到文件Test2.cs中

【FileSystemInfo 类】它是派生出 FileInfo和 DirectoryInfo类的抽象类;DirectoryInfo类包含可用于处理目录和子目录的方法;FileInfo类包含可用于处理文件的方法;DirectoryInfo 类公开实例方法;DirectoryInfo 类的方法仅可由 DirectoryInfo类的实例调用
FileSystemInfo 类包含文件和目录操作所共有的方法。FileSystemInfo 对象可以表示文件或目录,从而可以作为 FileInfo 或 DirectoryInfo 对象的基础。当分析许多文件和目录时,请使用该基类。
第一次调用时,FileSystemInfo 调用 Refresh 并返回 API 上的缓存信息以获取属性等。以后调用时,必须调用 Refresh 以获取信息的最新副本。
一个派生类只有从 FileIOPermissionAccess 枚举获得 AllAccess 权限时才能从 FileSystemInfo 继承。

【FileInfo类】提供创建、复制、删除、移动和打开文件的实例方法,并且帮助创建 FileStream 对象。无法继承此类。
将 FileInfo 类用于典型的操作,如复制、移动、重命名、创建、打开、删除和追加到文件。
许多 FileInfo 方法在创建或打开文件时返回其他 I/O 类型。可以使用这些其他类型进一步处理文件。
如果打算多次重用某个对象,可考虑使用 FileInfo 的实例方法,而不是 File 类的相应静态方法,因为并不总是需要安全检查。
默认情况下,将向所有用户授予对新文件的完全读/写访问权限。

【FileInfo 类常用方法与属性】
常用方法
  • AppendText
    创建一个 StreamWriter,它向 FileInfo 的此实例表示的文件追加文本。
  • CopyTo
    将现有文件复制到新文件。
  • Create
    创建文件。
  • MoveTo
    将指定文件移到新位置,并提供指定新文件名的选项。
  • Open
    用各种读/写访问权限和共享特权打开文件。
  • OpenRead
    创建只读 FileStream。
  • OpenWrite
    创建只写 FileStream。
常用属性
  • DirectoryName
    获取表示目录的完整路径的字符串。
  • Exists
    获取指示文件是否存在的值。
  • Extension
    获取表示文件扩展名部分的字符串。
  • FullName
    获取目录或文件的完整目录。
  • Length
    获取当前文件的大小(字节)。

【DirectoryInfo 类】公开用于创建、移动和枚举目录和子目录的实例方法。无法继承此类。
将 DirectoryInfo 类用于典型操作,如复制、移动、重命名、创建和删除目录。
如果打算多次重用某个对象,可考虑使用 DirectoryInfo 的实例方法,而不是 Directory 类的相应静态方法,因为并不总是需要安全检查。

【DirectoryInfo 类常用属性和方法】
常用方法:
  • Create
    创建目录
  • CreateSubdirectory
    在指定路径中创建一个或多个子目录。指定路径可以是相对于 DirectoryInfo 类的此实例的路径
  • Delete
    从路径中删除 DirectoryInfo 及其内容。
  • MoveTo
    将 DirectoryInfo 实例及其内容移动到新路径。
常用属性:
  • Exists
    获取指示目录是否存在的值。
  • Extension
    获取表示文件扩展名部分的字符串。
  • FullName
    获取目录或文件的完整目录。
  • Name
    获取此 DirectoryInfo 实例的名称。
  • Parent
    获取指定子目录的父目录。
  • Root
    获取路径的根部分。

【TextReader 类】表示可读取连续字符系列的读取器。
TextReader 为 StreamReader 和 StringReader 的抽象基类,它们分别从流和字符串读取字符。使用这些派生类可打开一个文本文件以读取指定范围的字符,或基于现有的流创建一个读取器。
派生类必须至少实现 Peek 和 Read 方法以创建一个有用的 TextReader 实例。
StreamReader从字节流中读取字符并将它转换为指定的编码
StringReader类用于从输入字符串中读取数据

【StreamReader 类】实现一个 TextReader,使其以一种特定的编码从字节流中读取字符。
StreamReader 旨在以一种特定的编码输入字符,而 Stream 类用于字节的输入和输出。使用 StreamReader 读取标准文本文件的各行信息。
除非另外指定,StreamReader 的默认编码为 UTF-8,而不是当前系统的 ANSI 代码页。UTF-8 可以正确处理 Unicode 字符并在操作系统的本地化版本上提供一致的结果。
默认情况下,StreamReader 不是线程安全的。
常用方法:
  • Close
    关闭 StreamReader 对象和基础流,并释放与读取器关联的所有系统资源。
  • Read
    读取输入流中的下一个字符或下一组字符。
  • ReadBlock
    从当前流中读取最大 count 的字符并从 index 开始将该数据写入 buffer。
  • ReadLine
    从当前流中读取一行字符并将数据作为字符串返回。
  • ReadToEnd
    从流的当前位置到末尾读取流。

【TextWriter 类】表示可以编写一个有序字符系列的编写器。该类为抽象类。
TextWriter 是 StreamWriter 和 StringWriter 的抽象基类,它们将字符分别写入流和字符串。创建一个 TextWriter 实例,将对象写入字符串,或将字符串写入文件,或序列化 XML。也可使用 TextWriter 的实例将文本写入自定义后备存储区(所使用的 API 与用于字符串或流的 API 相同),或者增加对文本格式化的支持。
TextWriter 的所有使用基元数据类型作为参数的 Write 方法都将值作为字符串写出。
默认情况下,TextWriter 不是线程安全的。

【StreamWriter 类】实现一个 TextWriter,使其以一种特定的编码向流中写入字符。
StreamWriter 旨在以一种特定的编码输出字符,而从 Stream 派生的类则用于字节的输入和输出。
StreamWriter 默认使用 UTF8Encoding 的实例,除非指定了其他编码。UTF8Encoding 的实例不使用字节顺序标记 (BOM) 创建,因此它的 GetPreamble 方法返回一个空字节数组。要使用 UTF-8 编码和 BOM 创建 StreamWriter,请考虑使用指定编码的构造函数,例如 StreamWriter(String, Boolean, Encoding)。

默认情况下,StreamWriter 不是线程安全的。
常用方法:
  • Close
    关闭当前的 StreamWriter 对象和基础流。
  • Flush
    清理当前编写器的所有缓冲区,并使所有缓冲数据写入基础流。
  • Write
    写入流。
  • WriteLine
    将行结束符写入文本流。

原创粉丝点击