深入.net(文件操作)
----- 数据持久化技术:程序还运行过程中,所有的“中间数据”(加工或处理过程中数据)都存放在内存中,但内存的特点是掉电后数据无法保存,所以需要有种技术能够将存放在内存中数据进行“永久保存”,这样的技术我们称为持久化技术。
以“文件”的方式对数据进行“持久化保存”:
方式一:直接将内存中的数据,搬运到磁盘文件中 ------ 二进制文件
方式二:将内存中的数据进行“逻辑转意”为字符,然后再写入到文件 ----- 文本文件
“文本文件”读写操作:
方式一:(五个步骤,使用FileStream、StreamReader[StreamWrite])
//1、创建 “文件流” 对象
FileStream fs = new FileStream(filePath, FileMode.Create);
//2、创建 “文件读写器”对象
StreamWriter sw = new StreamWriter(fs);
//3、读写操作
sw.Write(this.textBox1.Text);
//4、关闭“读写器”
sw.Close();
//5、关闭“文件流”
fs.Close();
方式二:使用 Using 简化代码(减少关闭的代码和步骤)
//1、创建 “文件流” 对象
using (FileStream fs = new FileStream(filePath, FileMode.Create))
{
//2、创建 “文件读写器”对象
using (StreamWriter sw = new StreamWriter(fs))
{
//3、读写操作
sw.Write(this.textBox1.Text);
}
}
方式三:直接使用StreamReader、StreamWrite
//1、创建 “文件读写器”对象
using (StreamWriter sw = new StreamWriter(“D:\学员资料.txt”))
{
//2、读写操作
sw.Write(this.textBox1.Text);
}
使用“文本文件”实现数据持久化,一来当数据庞大且关系复杂时,其转换为“文本”的过程繁琐容易出错,开发效率低!因此,我们可以尝试将“数据对象”整个的端到磁盘的文件中! ------ 使用二进制文件保存数据【序列化技术】
序列化操作步骤:
1、对“待处理”数据进行“预处理”:将类定义为“可序列化”【要求其所有的家族都是可序列化】
2、创建“序列化”操作对象:
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
3、创建传输用“流”对象:
FileStream fs = new FileStream();
4、序列化操作
//创建 “流对象” (文件流) --- 负责运输
using (FileStream fs = new FileStream(@"c:\mydata", FileMode.Open))
{
//创建 “序列化对象” --- 负责对象【打包】
BinaryFormatter bf = new BinaryFormatter();
//bf.Serialize(fs, _stuList1); 序列化方法
_stuList2 = bf.Deserialize(fs) as List<Student>; 反序列化方法
}
[Serializable] 可序列化标识代码
小贴士:
文本文件读写,最容易出现的错误就是“乱码”:
乱码的出现,是因为您读取和写入时,所采用的“字符编码规则”不一致!
注意:
读取自己文件 --- 应该采用一致“编码规则”
读取第三方文件 ---- 应该采用与其对应“编码规则”,或者,直接使用本机的默认编码规则
【设置方式:直接设置到读写器上】
StreamReader sr = new StreamReader(fs,Encoding.Default);
StreamReader sr = new StreamReader(fs,Encoding.UTF8)
StreamReader sr = new StreamReader(fs,Encoding.GetEncoding("gb2312"))
深入.net(文件操作)的更多相关文章
- 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档
.net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...
- 野路子出身PowerShell 文件操作实用功能
本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...
- Node基础篇(文件操作)
文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...
- 归档NSKeyedArchiver解归档NSKeyedUnarchiver与文件管理类NSFileManager (文件操作)
========================== 文件操作 ========================== 一.归档NSKeyedArchiver 1.第一种方式:存储一种数据. // 归档 ...
- SQL Server附加数据库报错:无法打开物理文件,操作系统错误5
问题描述: 附加数据时,提示无法打开物理文件,操作系统错误5.如下图: 问题原因:可能是文件访问权限方面的问题. 解决方案:找到数据库的mdf和ldf文件,赋予权限即可.如下图: 找到mdf ...
- 通过cmd完成FTP上传文件操作
一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...
- Linux文件操作的主要接口API及相关细节
操作系统API: 1.API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用,应用层程序通过调用API来调用操作系统中的各种功能,来干活 文件操作的一般步骤: 1.在linux系统 ...
- C语言的fopen函数(文件操作/读写)
头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为: FILE * fopen(const char * path, c ...
- Python的文件操作
文件操作,顾名思义,就是对磁盘上已经存在的文件进行各种操作,文本文件就是读和写. 1. 文件的操作流程 (1)打开文件,得到文件句柄并赋值给一个变量 (2)通过句柄对文件进行操作 (3)关闭文件 现有 ...
- python 文件操作(转)
python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目 ...
随机推荐
- IOS从视频中获取截图
从视频中获取截图: NSString *movpath =[[NSBundle mainBundle] pathForResource:@”iosxcode4″ ofType:@”mov”]; mpv ...
- 【Android】Anroid5.0+新控件---酷炫标题栏的简单学习
Android5.0+推出的新控件感觉特别酷,最近想模仿大神做个看图App出来,所以先把这些新控件用熟悉了. 新控件的介绍.使用等等网上相应的文章已经特别多了,题主也没那能力去写篇详解出来,本篇随笔记 ...
- MySql安装出现问题---无服务,修改密码
之前在项目中一直使用的是SqlServer数据库,现在学习下MySql,下面是学习MySql的学习笔记. MySql简介 MySql是一种关联数据库管理系统(关系型),将数据 ...
- .Net语言 APP开发平台——Smobiler学习日志:用Gridview控件设计较复杂的表单
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的”Smobil ...
- Winform开发框架里面使用事务操作的原理及介绍
在很多情况下,事务是个很有用的东西,可以把一系列的操作组合成一个原子粒度的操作,一旦组合中某个地方出错,可以整个干净的进行滚回,不会留下脏数据:除此之外,事务还能提高批量操作的效率,如在本地SQLit ...
- 认识IoC
第一次接触IoC是我在学习MVP框架的时候,搭建一个MVP框架需要用到IoC,那时候就以为IoC就是依赖注入,但在后来的逐步了解中发现那个只是它的别名而已.IoC全称应该是Inversion of C ...
- DevExpress winform XtraEditor常用控件
最近在公司里面开始使用DevExpress winform的第三方控件进行开发和维护,这里整理一些常用控件的资料以便于后续查看 ComboBoxEdit 这个控件和winform自带的控件差不多,使用 ...
- MySQL中select * for update锁表的范围
MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例 ...
- pymssql examples
http://pymssql.org/en/latest/pymssql_examples.html Example scripts using pymssql module. Basic featu ...
- PHPUnit单元测试中类protected/private方法测试
这里首先有一个问题要考虑的是,这类方法是否要被测试? 理论上,这类方法都会被其它public类型的方法调用,只要对那些public的方法做充分的测试,就可以保证这些方法的可靠性,就没有必要再测了.好像 ...