.NET对IO的基本操作集合
分享一下对IO的基本使用,很简单的东西,不需要记住,用的时候看一下就可以了。
个人对IO的使用很少,记录日志,保存一些数据,保存文件,其他的基本上很少用到,做商城类的项目应该会用到很多
1.先配置一下文件路径,这里一般都把路径的地址放在配置文件里面(config文件),方便维护
//AppConfig
<appSettings>
<add key="LogPath" value="路径自己配置"/>
<add key="LogMovePath" value="路径自己配置"/>
</appSettings>
2.在代码中获取config中的路径地址
/// <summary>
/// 配置绝对路径
/// </summary>
private static string LogPath = ConfigurationManager.AppSettings["LogPath"];
private static string LogMovePath = ConfigurationManager.AppSettings["LogMovePath"];
/// <summary>
/// 获取当前程序路径
/// </summary>
private static string LogPath2 = AppDomain.CurrentDomain.BaseDirectory;
3.下面正式开始对IO的操作
检查路径是否存在,这里要注意一下,如果路径不存在,也不会报错,所以这里的验证是很有必要。
//检查路径是否存在
if (!Directory.Exists(LogPath))
{
//不存在则创建,一次性创建所有子文件夹
Directory.CreateDirectory(LogPath);
}
对文件夹的一些基本操作(增删改查),微软是很优雅的语言,给它一个路径,他会帮我们把整个路径都完整的创建出来,不需要考虑其他的,哪怕你给的路径只有根目录,子目录都会帮你创建好
//创建文件夹
Directory.CreateDirectory(LogPath);
//移动文件夹
Directory.Move(LogPath, LogMovePath);
//删除文件夹
Directory.Delete(LogMovePath);
路径存在了,定位到了路径下的文件夹,这时候需要获取一些文件夹信息的数据(这里路径不存在也不会报错,会返回一个虚假的文件夹信息,具体的可以自己测试一下)
这里是放了一些基本的东西,还有很多东西,大家可以自己去看一下
//用来描述具体的文件夹
DirectoryInfo info = new DirectoryInfo(LogPath);//不存在也不报错
//info.FullName,获取完整路径
//info.CreationTime,获取创建时间
//info.LastWriteTime,获取上次修改时间
//info.GetFiles().Lengt,获取当前文件夹下文件的数量
Console.WriteLine($"{info.FullName},{info.CreationTime},{info.LastWriteTime}{info.GetFiles().Length}");
文件夹找到了,下面检查一下文件夹下的文件是否存在
//检查文件是否存在
if (!File.Exists(Path.Combine(LogPath, "111.txt")))
{
//不存在操作
}
获取文件的基本信息,方法基本上跟文件夹的一样,区别不大
//用来描述具体文件
FileInfo fileinfo = new FileInfo(Path.Combine(LogPath, "111.txt"));
Console.WriteLine($"{fileinfo.FullName},{fileinfo.CreationTime},{info.LastWriteTime}");
将两个字符串合并成一个路径(路径+文件名),使用Path.Combine,这个方法会自动将两个合并成一个完整路径
string fileName = Path.Combine(LogPath, "log.txt");
string fileNameCopy = Path.Combine(LogPath, "logCopy.txt");
string fileNameMove = Path.Combine(LogPath, "logMove.txt");
将指定数据写如到文件中(这里以前有用这个来记录日志),下面使用了4种方式来对文件写入数据,使用哪个,就看自己的喜好了
//打开文件流(创建文件并写入)
using (FileStream fileStream = File.Create(LogPath))
{
string name = "";
byte[] bytes = Encoding.Default.GetBytes(name);
//写入文件流
fileStream.Write(bytes, , bytes.Length);
//清空缓存区,不清空文件没用数据
fileStream.Flush();
}
//打开文件流(创建文件并写入),跟上面的写法区别不大
using (FileStream fileStream = File.Create(LogPath))
{
StreamWriter sw = new StreamWriter(LogPath);
sw.WriteLine("");
sw.Flush();
}
//流写入器(创建/打开文件并写入),追加操作
using (StreamWriter sw = File.AppendText(LogPath))
{
string msg = "今天是个好天气";
sw.WriteLine(msg);
sw.Flush();
}
//流写入器(创建/打开文件并写入),追加操作
using (StreamWriter sw = File.AppendText(LogPath))
{
string msg = "今天是个好天气";
byte[] bytes = Encoding.Default.GetBytes(msg);
sw.WriteLine(bytes);
sw.Flush();
}
读取指定文件中的数据,一种分行读取,一种全部读取,返回的数据格式都是String类型
//读取文件内容,分行读取
foreach (string result in File.ReadAllLines(LogPath))
{
//输出每一行
Console.WriteLine(result);
}
//读取全部
string sResult = File.ReadAllText(LogPath);
Byte[] byteContent = File.ReadAllBytes(LogPath);
string sResultContent = Encoding.UTF8.GetString(byteContent);
如果文件太大怎么办?经常有人遇到过,一个文件好几个G,甚至几十个G的情况,如果是读取全部的话,会直接卡死的,下面给出一种最简单的方法
//分批读取文件
using(FileStream stream = File.OpenRead(LogPath))
{
//每次读取的长度,根据实际需求做调整
int length = ;
//成功读取的长度
int result = ;
do
{
//每次读取的数据容器
byte[] bytes = new byte[length];
//将数据读取并存放到数据容器中,返回成功读取的长度
result = stream.Read(bytes, , );
//展示成功读取的数据,实际场景根据需求来完成业务逻辑
for (int i = ; i < result; i++)
{
Console.WriteLine(bytes[i].ToString());
}
}
//当成功读取的长度小于每次读取的长度,说明已经读取完了,结束循环
while (length == result);
}
大概内容就这么多,还有两个挺实用的方法,省得每次都在哪 时间轴+随机数来重命名文件名了
//返回一个随机的文件名
Console.WriteLine(Path.GetRandomFileName());
//返回不带后缀名的文件名称
Console.WriteLine(Path.GetFileNameWithoutExtension(LogPath));
所有内容就这么多,IO这块的操作很简单,也不需要去记住,用的时候查一下就好了
.NET对IO的基本操作集合的更多相关文章
- 关于JAVA中顺序IO的基本操作
关于JAVA中顺序IO的基本操作 写在前面 最近研究一下JAVA中的顺序IO,在网络上找了一会儿,发现少有详细的介绍,顾此在此处说说顺序IO,才学疏浅,如有不对,望赐教. 什么是顺序IO 事实上JAV ...
- 小师妹学IO系列文章集合-附PDF下载
目录 第一章 IO的本质 IO的本质 DMA和虚拟地址空间 IO的分类 IO和NIO的区别 总结 第二章 try with和它的底层原理 简介 IO关闭的问题 使用try with resource ...
- 黑马程序员_<<IO流基本操作(Writer,Reader)>>
--------------------ASP.Net+Android+IOS开发..Net培训.期待与您交流! -------------------- 1.概述 硬盘之间的文件的传输,硬盘中文件的 ...
- 分享知识-快乐自己:IO流基本操作
点我参考常用API: IO图解: 相关理论: 流的概念和作用: 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将 ...
- 对文本的内容进行排序(io流、集合操作)
package com.itheima.demo01.BufferedStream; import java.io.*; import java.util.HashMap; /* 练习: 对文本的内容 ...
- IO流基本操作
第一种分法:.输入流2.输出流 第二种分法:.字节流2.字符流 第三种分法:.节点流2.处理流 //////////////////////////////////////////////////// ...
- ZooKeeper服务-操作(API、集合更新、观察者、ACL)
操作 create:创建一个znode(必须要有父节点)delete:删除一个znode(该znode不能有任何子节点)exists:测试一个znode是否存在并且查询它的元数据getACL,setA ...
- Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)
概要 前面,我们已经学习了ArrayList.接下来,我们以ArrayList为例,对Iterator的fail-fast机制进行了解.内容包括::1 fail-fast简介2 fail-fast示例 ...
- Java集合系列:-----------04fail-fast总结(通过ArrayList来说明fail-fast的原理以及解决办法)
前面,我们已经学习了ArrayList.接下来,我们以ArrayList为例,对Iterator的fail-fast机制进行了解.内容包括::1 fail-fast简介2 fail-fast示例3 f ...
随机推荐
- SELECT LAST_INSERT_ID() 的使用和注意事项
SELECT LAST_INSERT_ID() 的使用和注意事项 尊重个人劳动成果,转载请注明出处: http://blog.csdn.net/czd3355/article/details/7130 ...
- HDU 5538 (水不水?)
House Building Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) ...
- CSS实现三列布局方法总结
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABYwAAAI7CAYAAABPx9+YAAARJElEQVR4nO3cwWnDQBBA0TioJrXhTl
- 通过eclipse mybatis generater代码生成插件自动生成代码
Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件.通过在Ecl ...
- 2015/9/4 Python基础(8):映射和集合类型
Python里唯一的映射类型是字典.映射类型对象里,hash值(key)和指向的对象(值)是一对多的关系.字典对象是可变的,这一点上很像列表,它也可以存储任意个数任意类型的Python对象,其中包括容 ...
- XAMPP 启动mysql报错 InnoDB: Error: could not open single-table tablespace file……
昨天安装了最新版本XAMPP for Windows 1.8.3. 今天早上打开XAMPP双击mysql Start按钮报错,如下(部分截取): 2013-09-17 10:12:02 9012 [E ...
- 【BZOJ2946】公共串 [SAM]
公共串 Time Limit: 3 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 给出几个由小写字母构成的单词,求它们最 ...
- javascript 事件绑定
一.最简单和向后兼容性最好的事件绑定方法是把事件绑定到元素标识的属性.事件属性名称由事件类型外加一个“on”前缀构成.这些属性也被称为事件处理器 <INPUT TYPE="text&q ...
- C++获取系统时间的方法
//首先是了解这个结构体,_SYSTEMTIME ,然后通过系统函数GetLocalTime往这个结构体的变量中写入当前系统时间typedef struct _SYSTEMTIME { WORD wY ...
- poj 1062 昂贵的聘礼 (dijkstra最短路)
题目链接:http://poj.org/problem?id=1062 昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submission ...