26.C# 文件系统
1.流的含义
流是一系列具有方向性的字节序列,比如水管中的水流,只不过现在管道中装的不是水,而是字节序列。当流是用于向外部目标比如磁盘输出数据时称为输出流,当流是用于把数据从外部目标读入程序称为输入流。
2.文件读写
写入
string fileName = Server.MapPath("log.txt");
FileStream fs = File.Open(fileName, FileMode.OpenOrCreate,FileAccess.ReadWrite);
string strData = "Hello to you";
byte[] byteData = Encoding.UTF8.GetBytes(strData);
fs.Write(byteData, , byteData.Length);
读取
string fileName = Server.MapPath("log.txt");
FileStream fs = File.Open(fileName, FileMode.Open,FileAccess.Read);
byte[] buffer = new byte[];
int count =;
MemoryStream ms = new MemoryStream();
while ((count = fs.Read(buffer, , buffer.Length)) > )
{
ms.Write(buffer, , buffer.Length);
}
string strData= Encoding.UTF8.GetString(ms.ToArray());
注:File.Open方法不传FileAccess参数时,默认FileAcross.ReadWrite
3.StreamReader/StreamWriter流读写器
FileStream读写文件是直接对字节流进行操作的并不能对字符直接进行输入输出,使用StreamReader/StreamWriter可以方便的对字符/字符串进行操作。通常情况下都会把FileStream等其他流包装在StreamReader/StreamWriter中,因为这些类更容易对流进行处理。
3.1读写文本文件
写入
string fileName = Server.MapPath("log.txt");
FileStream fs = File.Open(fileName, FileMode.Open,FileAccess.Read);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("Hello to you");
sw.Write("It's now {0}", DateTime.Now.ToString());//格式化字符串
sw.Close();
fs.Close();
读取
string fileName = Server.MapPath("log.txt");
FileStream fs = File.Open(fileName, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs);
string lines="";
string line = sr.ReadLine();
lines += line;
while (line!=null)
{
line = sr.ReadLine();
lines += line;
}
txtContent.Text = lines;
sr.Close();
fs.Close();
注:StreamReader/StreamWriter本身不能对文件进行FileMode,FileAccess等权限控制,如果要控制需要在包装的流中进行
StreamReader读取二进制文件
string fileName = Server.MapPath("img\\中文Begrüßung.png");
StreamReader sr = new StreamReader(File.OpenRead(fileName));
byte[] buffer = new byte[];
int count;
MemoryStream ms = new MemoryStream();
while ((count = sr.BaseStream.Read(buffer, , buffer.Length)) > )
{
ms.Write(buffer, , count);
}
string fileName2 = Server.MapPath("img\\中文2.png");
FileStream fs = File.Open(fileName2, FileMode.OpenOrCreate);
ms.WriteTo(fs);
fs.Close();
sr.Close();
StreamReader读取二进制文件需要用到BaseStream,不能像读写文本文件那样,否则保存的文件不能用。
4.对象序列化为二进制数据
程序一般保存的数据都不是像一般的文本文件那样直接写入文本逐行保存的,而是以二进制数据的形式保存的,使用System.Runtime.Serialization.Formatters.Binary.BinaryFormatter可以把对象序列化为二进制数据,或者把二进制数据序列化为对象。
[Serializable]
public class Product
{
public long Id;
public string Name;
public double Price; [NonSerialized]
string Notes; public Product(long id, string name, double price, string notes)
{
this.Id = id;
this.Name = name;
this.Price = price;
this.Notes = notes;
} public override string ToString()
{
return string.Format("{0},{1},${2:F2},{3}",Id,Name ,Price ,Notes);
}
}
序列化/反序列化
List<Product> products = new List<Product>();
products.Add(new Product(, "poky", 10.2, "pokys"));
products.Add(new Product(, "kuti", 2.34, "第四方")); //序列化对象保存到文件
string fileName = Server.MapPath("ser.txt");
FileStream fs = File.Open(fileName, FileMode.OpenOrCreate);
BinaryFormatter serializer = new BinaryFormatter();
serializer.Serialize(fs, products);
fs.Close(); //反序列化
FileStream ls = File.Open(fileName, FileMode.OpenOrCreate);
List<Product> ps = serializer.Deserialize(ls) as List<Product>;
ls.Close();
注:这里是序列化为二进制数据,所以和序列化为Json/xml是不一样的。
5.压缩/解压数据
如果要保存的数据比较大,还可以对数据进行压缩再保存,但是这里的压缩是单纯压缩数据,不是压缩文件,所以和常用的压缩解压工具是不一样的。
public class CompressDAL
{
/// <summary>
/// 创建一个压缩文件
/// </summary>
/// <param name="fileName"></param>
/// <param name="data"></param>
public static void SaveCompressFile(string fileName, string data)
{
FileStream fs = File.Open(fileName, FileMode.Create,FileAccess.Write);
GZipStream gs = new GZipStream(fs, CompressionMode.Compress);
StreamWriter sw = new StreamWriter(gs);//向压缩流写入数据
sw.Write(data);
sw.Close();
} public static string LoadeCompressFile(string fileName)
{
FileStream fs = File.Open(fileName, FileMode.Open,FileAccess.Read);
GZipStream gs = new GZipStream(fs, CompressionMode.Decompress);
StreamReader sr = new StreamReader(gs);
string lines = sr.ReadToEnd();
return lines;
} }
string data = "叫爸爸\n叫爸爸\n";
string fileName = Server.MapPath("gzFile.txt");
CompressDAL.SaveCompressFile(fileName, data);
string content = CompressDAL.LoadeCompressFile(fileName);
26.C# 文件系统的更多相关文章
- 系统管理员都要知道的 30 个 Linux 系统监控工具
1. top - 进程活动监控命令 top 命令会显示 Linux 的进程.它提供了一个运行中系统的实时动态视图,即实际的进程活动.默认情况下,它显示在服务器上运行的 CPU 占用率最高的任务,并且每 ...
- RHCSA阶段笔记
命令终端字段含义介绍 [root@localhost ~]# 解释: root:当前登录系统用户名(root超级管理员) localhost :当前主机名 :当前用户所在目录( 为家目录) ,root ...
- 射频识别技术漫谈(26)——Felica的文件系统
Felica的文件系统使用“系统\域\服务\数据块”的结构,如下图所示.通过这种结构实现对卡片非易失性存储区的使用和操作. Fe ...
- 26、pathlib文件系统模块(了解)
一.pathlib库官方定义 pathlib 是Python内置库,Python 文档给它的定义是 Object-oriented filesystem paths(面向对象的文件系统路径).path ...
- 26、linux文件系统
- .NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”
FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文 ...
- Linux学习之探索文件系统
Linux,一起学习进步- ls With it, we can see directory contents and determine a variety of important file ...
- .NET Core的文件系统[1]:读取并监控文件的变化
ASP.NET Core 具有很多针对文件读取的应用.比如我们倾向于采用JSON文件来定义配置,所以应用就会涉及针对配置文件读取.如果用户发送一个针对物理文件的HTTP请求,应用会根据指定的路径读取目 ...
- .NET Core的文件系统[4]:由EmbeddedFileProvider构建的内嵌(资源)文件系统
一个物理文件可以直接作为资源内嵌到编译生成的程序集中.借助于EmbeddedFileProvider,我们可以统一的编程方式来读取内嵌于某个程序集中的资源文件,不过在这之前我们必须知道如何将一个项目文 ...
随机推荐
- golang 使用kcp实例
简介kcp的具体概念与定义自行百度,特性可以浓缩为一句话,和tcp一样可靠,速度比tcp快,是一个用带宽换速度的新型协议.网上的示例代码很少,特此写一篇golang下的kcp实例. PS本文仅对ksp ...
- 自组织特征映射神经网络(SOFM)
1981年芬兰 Helsink 大学的 T·Kohonen 教授提出一种自组织特征映射网 (Self-Organizing Feature Map , SOFM ), 又称 Kohonen 网 . K ...
- didSelectRowAtIndexPath方法无响应解决办法
tableview的代理事件didSelectRowAtIndexPath失效,可能有三个原因: 1.没有设置tableview的Delegate 需要设置tableview的代理才可以响应代理事件 ...
- Flink状态管理和容错机制介绍
本文主要内容如下: 有状态的流数据处理: Flink中的状态接口: 状态管理和容错机制实现: 阿里相关工作介绍: 一.有状态的流数据处理# 1.1.什么是有状态的计算# 计算任务的结果不仅仅依赖于输入 ...
- Resin 与 Tomcat 服务器对比
Resin 与 Tomcat对比(个人总结) 图片来源Tomcat PK Resin 上图对比发现Tomcat对于Resin来说,有诸多优点,但是Resin也有很多优点. 比方说: 速度比较 re ...
- Python socket 编程(1)
服务端的创建: import socket server = socket.socket() # 创建一个socke对象 server.bind(('192.168.101.5', 8001)) # ...
- linux 列出本文件下的目录
`ls /etc` 和$(ls /etc) 是两种获取命令执行结果的方式. for file in List 的语法里面的List 就是使用使用ls /etc 的命令执行结果作为List(https: ...
- 机器学习-EM算法笔记
EM算法也称期望最大化(Expectation-Maximum,简称EM)算法,它是一个基础算法,是很多机器学习领域算法的基础,比如隐式马尔科夫算法(HMM), LDA主题模型的变分推断,混合高斯模型 ...
- hdu 2102 a计划问题。。 双层dfs问题
Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长 ...
- 在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字)
原文:在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.