• .net------文件和流I/O


    前言

    文件和流操作

    磁盘、目录、文件的基本操作

    文本文件的读取和写入

    二进制文件的读取和写入

    随机文件访问

    文件和流操作

    文件

    • 数据的集合,一般保存在磁盘或其他存储介质上
    • 文件I/O(数据的输入/输出)通过流(Stream)来实现

    流提供一种向后备存储写入字节和从后备存储读取字节的方式
    对于流有5种基本的操作:
    打开
    读取
    写入
    改变当前位置
    关闭

    磁盘、目录、文件的基本操作

    磁盘的基本操作

    DriveInfo类提供方法和属性以查询驱动器信息
    确定可用的驱动器及其类型、驱动器的容量和可用空闲空间等

    DriveInfo[] allDrives = DriveInfo. GetDrives();
    Console.WriteLine("驱动器 {0}", d.Name); 
    Console.WriteLine("  类型: {0}", d.DriveType);
    if (d.IsReady == true)
    { 
    Console.WriteLine("  卷标: {0}", d.VolumeLabel);
    Console.WriteLine("  文件系统: {0}", d.DriveFormat);
    Console.WriteLine(" 当前用户可用空间: {0, 15}字节", d.AvailableFreeSpace);
    Console.WriteLine("  可用空间:         {0, 15}字节", d.TotalFreeSpace);
    Console.WriteLine("  磁盘总大小:       {0, 15}字节", d.TotalSize); 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    目录的基本操作

    Directory类和DirectoryInfo类提供用于目录基本操作的方法:
    创建、复制、移动、重命名和删除目录
    获取和设置目录的创建、访问及写入的时间戳信息等

    Directory所有方法都是静态的
    DirectoryInfo类提供实例方法

    判断目录是否存在:bool b1 = Directory.Exsits(@”c:\src”); 
    DirectoryInfo di = new DirectoryInfo (@”c:\src”);  bool b2 = di.Exists;
    
    创建目录:Directory di2 = Directory.CreateDirectory(@”c:\src”); 
    删除目录:Directory. Delete(path2, true);
    移动目录:Directory. Move(@”c:\src”, @”c:\src1”);
    获取目录中子目录/文件:
    string[] sdirs1 = Directory. GetDirectories(path1);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    文件的基本操作

    File类(静态方法)和FileInfo类(提供实例方法)提供用于文件基本操作的方法

    创建、复制、移动、重命名和删除文件
    打开文件,读取文件内容和追加内容到文件
    获取和设置文件的创建、访问及写入的时间戳信息等

    判断文件是否存在:bool b1 = File.Exsits(@”c:\src\test.txt”); 
    FileInfo fi = new FileInfo (@”c:\src\test.txt”);  bool b2 = fi.Exists;
    
    创建文件/打开文件:Create/Open/CreateText
    删除文件:File. Delete(path);
    复制文件:File. Copy(@”c:\src\test.txt”, @”c:\src\test1.txt”);
    移动文件:File. Move(@”c:\src\test.txt”, @”c:\src\test1.txt”);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    文本文件的读取和写入

    StreamReader类和StreamWriter类分别以一种特定的编码从字节流中读取字符和向流中写入字符

    1.创建StreamWriter对象(打开文本文件)
    2.写入字符数据到文本文件
    3.关闭流(关闭文件)

    1.创建StreamReader对象(打开文本文件)
    2.从打开的文本文件中读取字符数据
    3.关闭流(关闭文件)

    private const string FILE_NAME = @"c:\temp\TestFile.txt";
    //创建StreamWriter实例以在文件中添加文本
    using (StreamWriter sw = new StreamWriter(FILE_NAME))
    { //在文件中添加文本
                sw.Write("文本文件"); sw.WriteLine("的写入/读取示例:");
                sw.WriteLine("----------------------------------");
                sw.WriteLine("写入整数 {0} 或浮点数 {1}", 1, 4.2);
                bool b = false; char grade = 'A'; string s = "Multiple Data Type!";
                sw.WriteLine("写入Boolean值、字符、字符串、日期:");
                sw.WriteLine(b); sw.WriteLine(grade); sw.WriteLine(s); 
                sw.Write("当前日期为:"); sw.WriteLine(DateTime.Now);
    }
            private const string FILE_NAME = @"c:\temp\TestFile.txt";
            public static void Main(String[] args)
            {
               try
               { //创建StreamReader实例以从文本文件中读取内容.
                 using (StreamReader sr = new StreamReader(FILE_NAME))
                 {
                   String line;
                   //读取文本文件每一行的内容,直至文件结束
                    while ((line = sr.ReadLine()) != null){ Console.WriteLine(line); }
                 }
               }
               catch (Exception e) { Console.WriteLine(e.Message); } // 异常处理
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    二进制文件的读取和写入

    二进制文件的读取和写入

    • BinaryReader类和BinaryWriter类在 Streams 中读取和写入编码的字符串和基元数据类型

    • 创建BinaryWriter对象(打开二进制文件)
      FileStream fs = File.Open(@”Test.dat”, FileMode.Open);
      BinaryWriter bw = new BinaryWriter(fs);

    • 写入二进制数据到文本文件

    • 关闭流(关闭文件)
      ……

    随机文件访问随机文件访问

    • FileStream类支持通过其Seek方法随机访问文件

    • Seek通过字节偏移量将读写位置移动到文件中任意位置

    • SeekOrigin.Begin

    • SeekOrigin.Current

    • SeekOrigin.End

    • fs.Seek(0,SeekOrigin.Begin)

    通用I/O流类

    • BufferedStream 是向另一个 Stream(例如 NetworkStream)添加缓冲的 Stream

    • CryptoStream 将数据流链接到加密转换

    • MemoryStream 是一个非缓冲的流,可以在内存中直接访问它的封装数据。该流没有后备存储,可用作临时缓冲区

    • NetworkStream 表示网络连接上的 Stream

  • 相关阅读:
    微课录制系统的作用体现
    让pandas速度提升10倍从apply到parallel_apply
    多年前使用一个裸机的fat32开源文件系统znFAT
    Java代码一行怎么运转起来?
    Python Socket对象的内置函数和属性一览表
    基于electron+vue+element构建项目模板之【自定义标题栏&右键菜单项篇】
    群晖服务器Synology nas断电重启后 如何重新连接。重新设置静态IP
    Python将list中的所有元素转为字符串
    C++ :全局变量(extern int a;)、全局函数【可跨文件/模块使用】【只在头文件中做“声明”】
    VPS、独服和云服务器哪种最适合您的业务?
  • 原文地址:https://blog.csdn.net/weixin_51422230/article/details/128056291