文件和流IO

  • 文件可以看作是数据的集合,一般保存在磁盘或其他存储介质上
  • 文件I/O(数据的输入/输出)通过流(Stream)来实现;流提供一种向存储写入字节和从存储读取字节的方式
  • 对于流有5 种基本的操作:打开、读取、写入、改变当前位置、关闭
  • .NET Framework的System.IO命名空间如下图所示

DriveInfo类:

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

//Driveinfo类
DriveInfo[] drivers = DriveInfo.GetDrives();
foreach (var d in drivers)
{Console.WriteLine($"Total size:{Math.Round(d.TotalSize/Math.Pow(1024,3),2)}GB,FreeSpace:{Math.Round(d.AvailableFreeSpace/ Math.Pow(1024, 3), 2)}GB,Format:{d.DriveFormat},Name:{d.Name},root path:{ d.RootDirectory.Name},Drivetype:{d.DriveType.ToString()}");
}
Console.ReadKey();//Directory类
if (!Directory.Exists("D:\\MyRoot"))Directory.CreateDirectory("D:\\MyRoot");if (Directory.Exists("D:\\MyRoot"))Directory.Delete("D:\\MyRoot",true);//删除子目录

Directory和DirectoryInfo类:

  • 提供用于目录基本操作的方法,包括创建、复制、移动、重命名和删除目录;获取和设置目录的创建、访问及写入的时间戳信息等;
  • Directory所有方法都是静态的,调用时需要传入目录路径参数。DirectoryInfo类提供实例方法,需要针对要操作的目录路径创建DirectoryInfo类的实例,然后调用相应的实例方法,适用于对目录路径执行多次操作
  • Directory类的静态方法可以直接调用,而无需构建对象实例,故适用于对目录路径执行一次操作;然而Directory类的静态方法对所有方法都执行安全检查,如果需要多次重用某个对象,建议使用DirectoryInfo的相应实例方法

//GetDirectories/GetFiles
string path = "D:\\dwang";
string[] files = Directory.GetFiles(path);
string[] dirs = Directory.GetDirectories(path);
string curr = Directory.GetCurrentDirectory();//当前项目exe目录
string c = Directory.GetDirectoryRoot(path);//获取指定Path的根目录

File和FileInfo

  • File所有方法都是静态的
  • 可以使用File类的静态方法Create/Open或FileInfo类的实例方法Create/Open创建或打开文件。创建文件后返回流对象FileStream/StreamWriter.
  •  FileModeCreateNew, Open,  OpenOrCreate,  Append,  Truncate(打开现有文件,并清空内容).

StreamReader和StreamWriter

  • 分别以一种特定的编码从字节流中读取字符和向流中写入字符
  • 分别实现字符串的读取和写入操作
  • 读写步骤:1.创建StreamWriter/StreamReader对象,2.写入/读取数据,3.关闭流.
  • 写入文件完成后,应该使用Close方法关闭流。否则,可能导致缓冲的数据没有最终更新到文件中, 文件操作一般采用using语句,可取代close方法.
//StreamWriter类
string path_stream = @"D:\dwang\test.txt";
using (StreamWriter sw = new StreamWriter(path_stream, true))
{sw.WriteLine("this is the content I wrote by streamwriter.");
}//StreamReader类,while判断读取的内容必须同时赋值给字符串,否则循环内部无法读取的行内容到屏幕
using (StreamReader sr = new StreamReader(path_stream))
{string line = string.Empty;while ((line = sr.ReadLine()) != null){Console.WriteLine(line);}
}
Console.ReadKey();

FileStream读写文件:

  • FileStream类支持通过其Seek方法随机访问文件
  • Seek通过字节偏移量将读取/写入位置移动到文件中的任意位置,字节偏移量是相对于查找参考点(文件的开始、当前位置或结尾,分别对应于SeekOrigin.Begin、SeekOrigin.Current和SeekOrigin.End)
  • 读写操作步骤:
  1. 定位filestream对象;
  2. 定位;打开文件后(即创建FileStream对象实例后),可以使用其实例方法Seek将该流的当前位置设置为给定值, 例如:fs.Seek(0,SeekOrigin.Begin); //定位到开始位置
  3. 打开文件后(即创建FileStream对象实例后),可以使用其实例方法Write/Read,写入或读取字节数据
  4. 使用Close方法关闭流,或创建对象时用using关键字,执行完自动关闭流.
//FileStream write & read
using (FileStream fs = File.Open(@"D:\dwang\test.data", FileMode.Open,FileAccess.ReadWrite))
{string stringToWrite = "this is written by Filestream";fs.Write(Encoding.Default.GetBytes(stringToWrite),0,stringToWrite.Length);//read test.data all contentfs.Seek(0, SeekOrigin.Begin);byte[] b = new byte[1024];while(fs.Read(b,0,b.Length)>0){Console.WriteLine(Encoding.Default.GetString(b));}Console.ReadKey();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/274215.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式学习37-TCP并发模型

TCP并发模型: 1.TCP多线程模型: 缺点: 1.创建线程会带来 资源开销 2.能够实现的 并发量 比较有限 2.IO模型: 1.阻塞IO: 没有…

基于android的物业管理系统的设计与实现19.8

目录 基于android的物业管理系统的设计与实现 3 摘 要 3 Android property managemengt system 5 Abstract 5 1 绪论 6 1.1 选题背景 6 1.2 课题研究现状 6 1.3 设计研究主要内容 7 1.4 系统主要设计思想 8 2 开发环境 8 2.1 Android系统的结构 8 图2-1 Android系统架构图 9 2…

python(ogr)处理geojson为本地shp文件

前言 本次所利用的geojson数据来自https://geo.datav.aliyun.com/areas_v3/bound/410000_full.json ,如果觉得下方代码看起来不方便,可以来GitHub上来看,在这上面还有一些辅助内容便于理解 GISpjd/GIS-union-Python (github.com)https://gi…

SQL笔记——数据库系统导论(数据库的设计)

目录 数据依赖范式第一范式1NF第二范式2NF第三范式3NFBC范式 数据依赖的公理系统闭包最小依赖集候选码 设计需求分析概念结构设计E-R图的概念模型E-R模型转换为关系模型(指出转换结果中每个关系模式的主码和外码) 逻辑结构设计物理结构设计数据库实施数据库运行和维护 数据依赖…

内部应用解耦神器-Spring事件

大家好,我是程序员牛牛,《AI超级个体: ChatGPT与AIGC实战指南》的参与人,10年Java编程程序员。 1. 概述 在做业务开发过程中,有些复杂点的逻辑,可能代码逻辑会很冗长,举一个很简单的例子,如&am…

基于Web的论文管理系统设计

目 录 目 录 III 摘 要 V 关键词 V Abstract VI Key Word VI 第一章 绪论 6 1.1系统设计背景 1 1.2系统设计目的与意义 1 1.3国内外现状 2 1.4本文结构 3 第二章 需求分析 3 2.1系统需求分析 4 2.2系统角色设计 4 第三章 系统开发技术 4 3.1 PHP语言简介和特点 5 3.2 Mysql数据…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的铁轨缺陷检测系统(Python+PySide6界面+训练代码)

摘要:开发铁轨缺陷检测系统对于物流行业、制造业具有重要作用。本篇博客详细介绍了如何运用深度学习构建一个铁轨缺陷检测系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并对比了YOLOv7、YOLOv6、YOLOv5,展示了不同模…

工业数学模型——冶金烧结配矿(一)

1、工业场景 从很多种铁矿石中选出适合烧结配料的部分铁矿石及其比例,并使其成本最低。 2、数学模型 设Pi代表了第i种原料的成本,xi代表了第i种原料在总配料中的比例,其中i取值为1,2,…,n。计算1吨配料成本: 第种原料的成本是Y…

Caffeine--实现进程缓存

本地进程缓存特点 缓存在日常开发中起着至关重要的作用, 由于存储在内存中, 数据的读取速度非常快,能大量减少对数据库的访问,减少数据库的压力. 缓存分为两类: 分布式缓存, 例如Redis: 优点: 存储容量大, 可靠性更好, 可以在集群间共享缺点: 访问缓存存在网络开销场景: 缓存数…

第二十一天-NumPy

目录 什么是NumPy NumPy使用 1.数组的创建 2.类型转换 3.赠删改查 4.数组运算 5.矩阵运算 什么是NumPy 1.NumPy操作的是多维数组,什么是纬度? NumPy使用 1. 安装 pip install numpy import numpy as np 2.官网: 中文官网&#xff1a…

Python高级二

一、异常 1、定义 异常是在程序执行过程中出现的错误或意外情况。当程序遇到异常时,它会中断当前的执行流程,并尝试找到相应的异常处理机制来解决问题。 2、常见异常类型 SyntaxError:语法错误,通常是代码书写不符合Python语法规则…

LVS集群 ----------------(直接路由 )DR模式部署 (二)

一、LVS集群的三种工作模式 lvs-nat:修改请求报文的目标IP,多目标IP的DNAT lvs-dr:操纵封装新的MAC地址(直接路由) lvs-tun:隧道模式 lvs-dr 是 LVS集群的 默认工作模式 NAT通过网络地址转换实现的虚拟服务器&…

day01vue学习

day01 一、为什么要学习Vue 1.前端必备技能 2.岗位多,绝大互联网公司都在使用Vue 3.提高开发效率 4.高薪必备技能(Vue2Vue3) 二、什么是Vue 概念:Vue (读音 /vjuː/,类似于 view) 是一套 **构建用户界面 ** 的 …

网络基础aaa

三次握手 四次挥手 网络模型 TCP or UDP 的特点 如何理解 TCP 的5层协议 TCP的5层协议是指计算机网络体系结构中,与TCP(传输控制协议)相关的五个层次。这五个层次从高到低依次是:应用层、传输层、网络层、数据链路层和物理层。每…

Flask python开发篇: 写一个简单的接口

第一步:新建flask项目 参考使用pycharm新建一个项目 打开pycharm,根据下面图中箭头顺序,新建一个flask的项目; 第二步:运行项目, 安装成功以后,会有个app.py文件,打开以后&#…

OSI七层模型TCP四层模型横向对比

OSI 理论模型(Open Systems Interconnection Model)和TCP/IP模型 七层每一层对应英文 应用层(Application Layer) 表示层(Presentation Layer) 会话层(Session Layer) 传输层&#x…

JavaWeb--Maven

一:概述 1.简介 Maven 是专门用于管理和构建 Java 项目的工具,它的主要功能有: 提供了一套标准化的项目结构 提供了一套标准化的构建流程(编译,测试,打包,发布 …… ) 提供了一套…

【存储】ZYNQ+NVMe小型化全国产存储解决方案

文章目录 1、背景2、基础理论3、设计方案3.1、FPGA设计方案3.1.1、NVMe控制器实现3.1.2、NVMe控制器实现 3.2 驱动软件设计方案3.2.1 读写NVMe磁盘软件驱动3.2.2 NVMe磁盘驱动设计3.2.3 标准EXT4文件系统设计 3.3 上位机控制软件设计方案 4、测试结果4.1 硬件测试平台说明4.2 测…

计算机网络:应用层知识点汇总

文章目录 一、网络应用模型二、域名系统(DNS)三、文本传输协议(FTP)四、电子邮件五、万维网和HTTP协议 一、网络应用模型 p2p也就是对等模型 二、域名系统(DNS) 我们知道,随着人们建立一个网站…

打字通小游戏制作教程:用HTML5和JavaScript提升打字速度

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…