文件操作—整理

IO操作

复习集合:

ArrayList al=new ArrayList(); 1.长度可变,里面真正存储数据的是一个object数组(0个长度),2.第一次添加数据时,object数组被初始化为4个长度的数组对象 3.容量已满时,那么进行扩容, 数组长度*2

Object[] obj=new object[4]; 固定长度 

Hashtable ht=new Hashtable();

 

----------------------------IO及序列化----------------------------

1.窗体有3个文件组成 (Form1.cs ,Form1.Designer.cs  Form1.resx  )

a) Form1.cs 凡是继承于 Form类的都可以看成是窗体

b) Form1.Designer.cs  由partial关键字修饰的类 ,用它可以将放在不同地方, 这个文件中 有窗体初始化代码(添加控件,,设置窗体控件大小,位置等)

c) Form1.resx 资源文件,可以将图片,文件打包到 .resx文件中,不容易被他人修改其中内容.

 

2..windows窗体

partial关键字 分布类,用它可以将类放在不同地方

窗体上拖入的控件,其实都是窗体类的成员.(Controls)

当我们点击按钮的时候,(通过事件对象绑定click方法 EventHandler Click)调用了按钮对象的OnClick()方法,再找到用户双击按钮生成的Button_Click()方法

3.文件操作IO: 常用相关类 目录和文件的命名空间System.IO 

a) File类----操作文件,对文件整体操作.拷贝,删除,剪切等

b) Directory----操作目录(文件夹),静态类

c) Path-----对文件或目录的路径进行操作(很方便) --针对地址字符串

d) DirectoryInfo----文件夹的一个"类",用来描述一个文件夹对象

e) FileInfo----文件类,用来描述一个文件对象

f) Stream---文件流,抽象类

i. FlieStream-->文件流, MemoryStream(内存流),NetworkStream

(网络流)

ii.StreamReader-->快速读取文本文件

iii.StreamWrite-->快速写入文本文件

 

5.当我们使用文件流的时候,在关闭流的时候,数据才会保存到文件中,

因为在写文件的时候,内容先写在文件流的缓冲区中byte[] buffer, 等程序关闭后,内容才能写入.

Winform中 的Close()方法中自动调用Dispose(),然后调用GC回收

Using的本质就是一个 try finally 语句块, finally代码块中调用IDisposable接口中 Dispose();

所有要使用using关键字 来释放资源的类,都必须实现IDisposable接口,如果想在using中捕捉异常的话,还需要用try catch

1.Path类:

i. string ChangeExtension("1.jpg",".exe");修改后缀名, 注意:转换文件后缀名,并不会直接修改文件,而是返回一个修改后的新路径名 字符串.  string s = Path.ChangeExtension(@"C:\temp\F3.png", "jpg")

ii. String Combine(string path1,string path2);拼接字符串,形成新的文件路径,可以方便的解决不加"\"的问题,自动处理分隔符问题

iii. String GetdirectoryName(""); 取得文件所在文件夹 对应的 路径名.(即 除文件名之外的路径)

iv. String GetExtension(string path);获得文件 后缀名.

v. String GetFileName(string path);获得文件名

vi. String GetNameWithOutExtension(); 获得不带后缀的 文件名

vii. String GetFullPath(); 获得相对路径对应的 绝对路径 (注意:此时返回的绝对路径是程序集 的路径+传入的相对路径)

viii. String GetTempPath() ;获得临时文件夹路径

ix. String GetTempFileName();获得生成的 一个临时文件夹下的文件路径.

 

 

对象序列化: 就是将对象里的字段及值 以"文本"的方式保存成文件

反序列化: 先创建一个相同的对象,然后将"文本"里保存的字段值 一 一设置到对象对应的字段值中.(过程: 读取文件中的类型和字段信息,通过反射创建类型对象)

序列化里的类 BinaryFormatter bf= new BinaryFormatter();

bf.Serilalize();//该方法内部进行反射创建类型对象

文件操作常用相关类

File //操作文件,静态类,对文件整体操作。拷贝、删除、剪切等。

Directory //操作目录(文件夹),静态类。

DirectoryInfo //文件夹的一个“类”,用来描述一个文件夹对象

FileInfo//文件类,用来描述一个文件对象

Path//对文件或目录的路径进行操作(很方便)【字符串】

Stream//文件流,抽象类。

FileStream//文件流,MemoryStream(内存流),NetworkStream(网络流)

StreamReader //快速读取文本文件

StreamWriter//快速写入文本文件

 

操作目录: 

为了实现目录树,所以要掌握读取目录的类

Directory和DirectoryInfo

1.void Delete(string path, bool recursive------删除目录, recursive表示是否递归删除,如果recursive为false则只能删除空的目录,如果为true的话,连带该目录下的子目录一起删除

2.bool Exists(string path) -------判断目录是否存在

3.move(string path1,string path2)------文件移动,从path1移动到path2

4,CreateDirectory(string path)------创建新的文件夹(指定要创建文件夹的路径)

5.string[] GetDirectories(string path)-------得到一个目录下的子目录

6.String[] GetDirectories(string path, string searchPattern, SearchOption searchOption)------通配符查找目录下的子目录,可以搜索到隐藏文件。 

7.static string[] GetFiles(string path)------得到一个目录下的文件

8.String[] GetFiles(string path, string searchPattern, SearchOption searchOption)-------根据通配符查找目录下的文件(参数:搜索文件夹的路径, 通配符,是否搜索所有的子文件)

9.DirectoryInfo GetParent(string path)-----得到目录的父目录

10.获取当前exe文件执行的路径

Assembly.GetExecutingAssembly().Location;

不要用下面这个:

AppDomain.CurrentDomain.BaseDirectory;获得运行环境中的程序集中 当前运行的程序集 的根目录

11.Directory.GetCurrentDirectory();获取应用程序的当前工作目录。因为这个可能会变,通过使用OpenFileDialog或者手动设置Directory.SetCurrentDirectory()

 

操作文件 

1.文本文件编码,文本文件有不同的存储方式,将字符串以什么样的形式保存为二进制,这个就是编码,UTF-8、ASCII、Unicode等,如果出现乱码一般就是编码的问题,文本文件相关的函数一般都有一个Encoding类型的参数,取得编码的方式:Encoding.Default、Encoding.UTF8、Encoding.GetEncoding("GBK")

输出Encoding.GetEncodings(),所有编码。

2.什么是文本文件。拖到记事本中还能看得懂的就是文本文件,doc不是。

 

3.File类的常用静态方法:(FileInfo*)

void AppendAllText(string path, string contents),将文本contents附加到文件path中(如果文件不存在,则创建)

bool Exists(string path)判断文件path是否存在

string[] ReadAllLines(string path) 读取文本文件到字符串数组中

string ReadAllText(string path) 读取文本文件到字符串中

void WriteAllText(string path, string contents)将文本contents保存到文件path中,会覆盖旧内容。

WriteAllLines(string path,string[] contents),将字符串数组逐行保存到文件path中,会覆盖旧内容。

4. File类的方法2:操作文本文件

1.File.ReadAllLines(“path”, Encoding.Default);//读取所有行,返回string[]

File.ReadAllText(“path”, Encoding.Default);//读取所有文本返回string

File.ReadAllBytes(“path”);//读取文件,返回byte[]

===================================

File.WriteAllLines(“path”, new string[4] ,Encoding.Default);//将string数组按行写入文件。

File.WriteAllText(“path”, “string”);------将字符串全部写入文件

File.WriteAllBytes(“path”,new byte[5]);------将byte[]全部写入到文件

File.AppendAllText();-----将string追加到文件

File.Copy(“source”, “targetFileName”, true);-----文件拷贝,true表示当文件存在时“覆盖”,如果不加true,则文件存在报异常。

File.Exists();------判断文件是否存在

File.Move(“source”, “target”);------移动(剪切),思考如何为文件重命名?

File.Delete(“path”);------删除。如果文件不存在?不存在,不报错

File.Create(“path”);-------创建文件

小项目:资料管理器:

1.通过控件treeview显示两级目录

2.动态添加treeview节点。di.GetDirectories()获取所有的根文件夹

TreeNode tn = new TreeNode();

tn.Text = d.Name;

tn.Tag = d.FullName;

treeView1.Nodes.Add(tn);

3.遍历根文件夹的同时添加二级节点,三级节点上添加文件的名儿

4.双击文本节点(怎么判断是否是文本节点?)在文本框中显示资料的内容

递归的方式 显示无限极节点

 

 

文件操作学习要点:

1.IO类的静态方法,方便程序员能快速操作文件夹和文件

a) File

b) DIrectory

c) Path

2.(重点)文件流:

a) FileStream fs=new FileStream("路径",FileMode.OPenOrCreate)

b) StreamReader sr=new StreamReader (fs,Encoding.Default);

1. String str=sr.Readline();

c) StreamWriter sw=new StreamWriter(fs,Encoding.Default);

1. sw.writeLine("aaaa");

FileStream 主要用来操作任意类型格式的文件数据

StreamReader ,StreamWriter 是直接操作字符串的文本格式 将流中缓冲区保存的数组 转到 StreamReader 中的缓冲区字符数组中.

1.序列化:

[Serializable] //可能被序列化的对象的类,必须加入(可序列化) 特性

Public class Person{}

二进制格式化器,将对象(字段和字段值, 类名)转成文本.

2.反序列化:

二进制格式化器,按照文本(字段和字段值,类名)信息里的类名,使用反射技术 创建 对象,并将对应的字段值设置到新对象的字段中.

3.序列化 和 反序列化 的真实应用怎么的?

a) 传输对象

b) 持久化保存对象(硬盘)

 

 

posted @ 2012-07-02 23:47  zxp19880910  阅读(267)  评论(0编辑  收藏  举报