文件和流IO

news2024/12/24 2:22:08
  • 文件可以看作是数据的集合,一般保存在磁盘或其他存储介质上
  • 文件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 content
    fs.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.coloradmin.cn/o/1509904.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux:进程

进程 知识铺垫冯诺依曼体系结构操作系统(OS) 进程概念进程的查看ps 命令获取进程 pid文件内查看进程终止进程的方式kill命令快捷键 进程的创建 forkfork 返回值问题 进程状态运行状态 :R休眠状态:S (可中断&#xff09…

PCBA方案设计充气泵设计

随着科技的不断进步,充气泵在户外活动、露营和旅行中变得越来越常见。而充气泵的性能和稳定性主要依赖于其控制系统,其中芯片的设计和开发是充气泵方案的关键。SIC8833芯片是一款专门为充气泵设计的芯片,接下来我们来讲下充气泵方案芯片SIC88…

[java基础揉碎]面向对象多态

目录 问题引出多态: 代码如下: 多态(多种状态)的介绍: 多态的具体体现: 方法的多态: 对象的多态: 我们用多态解决最上面的问题: ​编辑 ​编辑 多态的注意事项和细节: 多态的向上转型: ​编辑 多态的向下转型 属性的重写问题 问题引出多态: 代码如下: 新建一个食物…

Open3D 利用四个点计算球心和半径 (28)

Open3D 利用四个点计算球心和半径 (28) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 给定的四个点坐标,计算球心和半径,提供验证的四个点来比较最终的结果是否准确。 二、算法实现 1.代码 代码如下(示例): import numpy as npdef calculate_sphere_center_…

如何选择AI项目:从任务自动化到社会价值的全面考虑

目录 前言1 任务自动化的首要选择1.1 公司痛点分析:深入挖掘潜在问题1.2 数据集的收集与大小考虑:确保数据质量和规模匹配 2 AI项目的商业潜力2.1 技术考察与性能目标:确保技术选择符合项目需求2.2 商业考虑与成本效益分析:全面评…

《向量数据库指南》——Milvus Cloud BYOC 是什么?

Milvus Cloud BYOC 是什么? 10 个月前,Zilliz 正式发布了全托管的 Milvus 云服务——Milvus Cloud,为用户提供低成本、高性能的向量数据库服务。Zilliz 在打磨细节之际,也收到了来自管控较为严格的行业公司和组织的需求,他们大多来自于汽车、金融、医疗等行业,需要将数…

【Java设计模式】十六、责任链模式

文章目录 1、责任链模式2、案例:批假3、在源码中的实际应用 1、责任链模式 一个请求可以有多个对象处理,但这些对象能处理的权限不同。比如公司请假,部门负责人、副经理、经理都能批,但他们能批的最大天数不一样。每次让员工直接…

加密与安全_PGP、OpenPGP和GPG加密通信协议

文章目录 PGPOpenPGPGPG工作原理工作流程用途案例说明过程 代码实现pom依赖PgpEncryptionUtilPgpDecryptionUtilCommonUtilsPgpEncryptionTest 小结 PGP PGP (Pretty Good Privacy) 是一种加密通信协议,用于保护电子邮件和文件的安全性和隐私。它通过使用加密、数字…

福派斯狗粮质量怎么样?

亲爱的宠物家长们,你们是不是也在为选择一款高质量的狗粮而犯愁呢?今天,我要和大家分享一下福派斯狗粮的质量问题,希望能够为你们提供一些参考。 🐾 首先,让我们来聊聊福派斯狗粮的原材料。福派斯狗粮选用的…

机器学习模型—支持向量机 (SVM)

机器学习模型—支持向量机 (SVM) 支持向量机 (SVM) 是一种强大的机器学习算法,用于线性或非线性分类、回归,甚至异常值检测任务。SVM 可用于各种任务,例如文本分类、图像分类、垃圾邮件检测、笔迹识别、基因表达分析、人脸检测和异常检测。SVM 在各种应用中具有适应性和高效…

【VUe】简略学习 vue

Vue 是一套用于构建用户界面的渐进式框架。要想使用这个框架,就需要先在页面中引用: 如何使用: 来到控制台: 数据绑定 若要在标签里替换,就需要使用 v-bind 指令了: 在标签里(尖括号里&#xf…

jpg 转 ico 强大的图片处理工具 imageMagick

点击下载 windows, mac os, linux版本 GitHub - ImageMagick/ImageMagick: 🧙‍♂️ ImageMagick 7 1. windows程序 链接:https://pan.baidu.com/s/1wZLqpcytpCVAl52pIrBBEw 提取码:hbfy 一直点击下一步安装 2. 然后 winr键 打开cmd 然…

软文推广怎么做效果更好?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 软文推广想要效果好,你可以这么做: 1. 选对平台很重要 首先,你得找准你的目标受众喜欢去哪,然后就去那儿发软文。别盲目乱投,…

【计算机网络】1.5 分组交换网中的时延、丢包和吞吐量

A.分组交换网中的时延 当分组从一个节点沿着路径到后一节点时,该分组在沿途的各个节点经受了几种不同类型的时延。 时延的类型 处理时延 - d n o d a l d_{nodal} dnodal​ 处理时延包括以下部分—— a. 检查分组首部 b. 决定分组导向 排队时延 - d p r o c d_{…

原生JavaScript,根据后端返回扁平JSON动态【动态列头、动态数据】生成表格数据

前期准备&#xff1a; JQ下载地址&#xff1a; https://jquery.com/ <!DOCTYPE html> <html><head><meta charset"utf-8"><title>JSON动态生成表格数据,动态列头拼接</title><style>table {width: 800px;text-align: cen…

2.1 塑性力学——应力分析基本概念

个人专栏—塑性力学 1.1 塑性力学基本概念 塑性力学基本概念 1.2 弹塑性材料的三杆桁架分析 弹塑性材料的三杆桁架分析 1.3 加载路径对桁架的影响 加载路径对桁架的影响 目录 个人专栏—塑性力学 应力 \color{blue}应力 应力&#xff1a;内力的分布集度 单元体 \color{blue}单…

C++初学

1>思维导图 2>试编程 提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数要求使用C风格字符串完成 #include <iostream> #include<string.h> using namespace std;int main() {string str;cout <<…

选择短信群发平台要小心陷阱

你知道短信群发平台也有陷阱吗&#xff1f;选择短信群发平台很重要&#xff0c;今天小编就为您介绍短信群发平台有哪些陷阱&#xff1f; 这几点你要注意了&#xff1a; 1、扣量&#xff0c;有些不靠谱的短信群发平台开始以低价诱惑“客户”&#xff0c;但是发送过程中就暗中扣…

不锈钢电阻器-栅极电阻器 - 为什么要使用它们呢?

常规 如果你看一个典型的吉他放大器的原理图&#xff0c;你会注意到有一个电阻器与第一个电子管的栅极串联&#xff0c;通常在68K左右&#xff0c;还有一个电阻器与功率管的栅极串联&#xff0c;通常为1.5K或5.6K&#xff0c;你可能会偶尔看到非常大的电阻&#xff0c; 例如 4…

学习JavaEE日子 Day24 TreeSet,内置比较器,外置比较器,HashMap

Day24 TreeSet 1.TreeSet 1.1 TreeSet的使用 注意&#xff1a;TreeSet的使用和HashSet一样 public class Test01 {public static void main(String[] args) {//创建TreeSet集合的对象TreeSet<String> set new TreeSet<>();//添加元素set.add("麻生希"…