首页 > 其他分享 >文件和流IO

文件和流IO

时间:2024-03-13 11:30:27浏览次数:19  
标签:文件 string FileStream 写入 IO Directory path

  • 文件可以看作是数据的集合,一般保存在磁盘或其他存储介质上
  • 文件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();
}

标签:文件,string,FileStream,写入,IO,Directory,path
From: https://blog.csdn.net/weixin_44279482/article/details/136640798

相关文章

  • aardio 背景透明的3种方式(透明窗体1 webview2,透明窗体2-win-region-bitmap,透明窗体3-w
    3种透明模式我给起个名字,也好记忆。透明模式1:浏览器模式透明模式2:位图遮罩模式透明模式3:背景透明模式aardio背景透明的3种方式(透明窗体1webview2,透明窗体2-win-region-bitmap,透明窗体3-winform-transparent-color)3种透明窗体,主要分成是否可以穿透,遮罩组件,全部显示。透明......
  • 如何查看docker 项目的配置文件
    目录如何查看Docker项目的配置文件方法一:通过Docker命令查看配置文件方法二:通过数据卷挂载方式查看配置文件方法三:使用Docker可视化工具查看配置文件示例场景方法一:通过Docker命令查看配置文件方法二:通过数据卷挂载方式查看配置文件方法三:使用Docker可视化工具查看配......
  • linux文件管理与用户管理
    linux文件管理与用户管理1、查看文件内容1、1回顾之前的命令cat命令tac命令head命令tail命令扩展:tail-f动态查看一个文件的内容1、2more命令分屏显示文件基本语法:#more文件名称特别注意:more命令在加载文件时并不是一点一点进行加载,而是打开文件就已经把文件内容......
  • linux文件管理(补充)
    linux文件管理vim编辑器vi概述vi编辑器他是linux和unix系统上最基本的文本编辑器,类似于windows系统下的记事本编辑器vim编辑器vim是vi的加强版,比vi更容易使用。vi的命令几乎全部都可以在vim上使用命令模式使用vim编辑器时,默认处于命令模式。在该模式下可以移动光标位置,可......
  • windwos下mysql5.7安装connection_control插件,限制多次登录失败,限定用户重试时间
    启动时加载插件,在配置文件中修改后重启服务[mysqld]plugin-load-add=connection_control.dll运行时加载插件INSTALLPLUGINCONNECTION_CONTROLSONAME'connection_control.dll';INSTALLPLUGINCONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTSSONAME'connection_control.dl......
  • 用QT开发Android投屏软件--上传文件和安装apk
    这篇文章我们给Android投屏软件增加文件上传和安装apk的功能。上传文件和安装apk对pc端的操作基本没有差别,因为apk也是一种文件格式。通过点击按钮或者拖动待上传(安装)的文件到投屏窗口,软件获取到文件路径,执行不同的adb命令。上传文件的adb命令:adb-s设备序列号push<电......
  • 01-Ajax&Axios
    AjaxAsynchronousJavascriptAndXml传统的请求方式:URL地址栏超链接form表单通过JS代码window.open(url)document.location.href=urlwindow.location.href=url缺陷:页面全部刷新,用户体验较差用户体验不连贯概述Ajax可以在浏览器中发送......
  • js实现大文件分片上传
    一个上传组件,需要具备的功能:需要校验文件格式可以上传任何文件,包括超大的视频文件(切片)上传期间断网后,再次联网可以继续上传(断点续传)要有进度条提示已经上传过同一个文件后,直接上传完成(秒传)前后端分工:前端:文件格式校验文件切片、md5计算发起检查请求,把当前文件的hash发送给服务......
  • 《手把手教你》系列技巧篇(三十一)-java+ selenium自动化测试- Actions的相关操作-番外
    1.简介上一篇中,宏哥说的宏哥在最后提到网站的反爬虫机制,那么宏哥在自己本地做一个网页,没有那个反爬虫的机制,谷歌浏览器是不是就可以验证成功了,宏哥就想验证一下自己想法,于是写了这一篇文章,另外也是相对前边做一个简单的总结分享给小伙伴们或者童鞋们。废话不多数,直接进入......
  • Ubuntu 20.04 部署 MinIO
    MinIO是一款基于ApacheLicensev2.0开源协议的分布式文件系统(或者叫对象存储服务),可以做为云存储的解决方案用来保存海量的图片、视频、文档等。由于采用Golang实现,服务端可以工作在Windows、Linux、OSX和FreeBSD上。配置简单,基本是复制可执行程序,单行命令就可以运行起来。M......