文件流
一、文件操作常用的相关类(System.IO)
类名
作用
File
静态类,对文件整体操作、拷贝、删除、剪切等
Directory
静态类,操作目录(文件夹)
DirectoryInfo
文件夹的一个“类”,用来描述一个文件夹对象
FileInfo
文件类,用来描述一个文件对象
Path
对文件或目录的路径进行操作
Stream
文件流,抽象类,FileStream 文件流,MemoryStream 内存流,NetworkStream 网络流,StreamReader 快读读取文本文件,StreamWriter 快速写入文本文件。
二、Path类
方法名
作用
ChangeExtension
修改文件的后缀,Path.ChangeExtension(@”c:\temp\f3.png”,”jpg”)
Combine
将两个路径合并成一个路径,Path.Combine(@”c:\temp”,”a.jpg”)
GetDiretoryName
得到文件的路径名,Path.GetDirectoryName(@”c:\temp\a.jpg”)
GetExtension
得到文件的扩展名,Path.GetExtension(@”c:\temp\a.jpg”)
GetFileName
得到文件路径的文件名部分
GetFileNameWithoutExtension
得到去除扩展名的文件名
GetFullPath
得到文件的全路径,可根据相对路径得到绝对路径
Assmbly.GetExecutiongssembly().Location
得到当前运行的程序集的路径
Demo1
class="code_img_closed" src="/Upload/Images/2014032610/0015B68B3C38AA5B.gif" alt="" />logs_code_hide('8e22c60d-a07d-4ca2-b56f-5f4305896ab7',event)" src="/Upload/Images/2014032610/2B1B950FA3DF188F.gif" alt="" />1 protected void Page_Load(object sender, EventArgs e) 2 { 3 string strPath = @"c:\1\erweima.jpg"; 4 Response.Write(Path.ChangeExtension(strPath, "png")); 5 Response.Write("</br>"); 6 Response.Write(Path.Combine(@"c:\1", "1.jpg")); 7 Response.Write("</br>"); 8 Response.Write(Path.GetDirectoryName(strPath)); 9 Response.Write("</br>"); 10 Response.Write(Path.GetExtension(strPath)); 11 Response.Write("</br>"); 12 Response.Write(Path.GetFileName(strPath)); 13 Response.Write("</br>"); 14 Response.Write(Path.GetFileNameWithoutExtension(strPath)); 15 Response.Write("</br>"); 16 Response.Write(Path.GetFullPath(strPath)); 17 }View Code
三、File类
方法名
作用
Create
创建制定的文件,如果文件存在则覆盖,File.Create(@:”c:\1.txt”)
AppendAllText
将制定的字符串追加到文本中,如果文件不存在,则创建该文件,File.AppendAllText(@“c:\1.txt”,”哈哈”)
AppendAllLines
在一个文件中追加文本行,如果文件不存在,则创建
Copy
将现有文件复制到新文件
Delete
删除指定的文件
Exists
判断指定路径的文件是否存在
Move
文件移动
ReadAllText
读取文件所有行
ReadAllLines
读取文本文档,返回字符串数组
WriteAllText
写入制定的字符串
WriteAllLines
写入指定的字符串数组
ASCII,基于拉丁字母的一套电脑编码系统。
GB2312,对ASCII码扩展,追加了适用于汉字的一套电脑编码(适用于中国大陆,1981年实施)
GB18030,对GB2312扩展,追加了中国大陆少数民族文字的电脑编码。
BIG5,通行于台湾、香港地区的繁体字编码方案。
Unicode,为多个国家统一制定的一套电脑编码,以满足跨语言、跨平台的文本转换、处理的要求。4个字节表示一个字符,很浪费资源。
UTF-8,对Unicode升级,用一到四个字节表示一个字符,不同的语言就用不同的长度。
Demo2
1 protected void Page_Load(object sender, EventArgs e) 2 { 3 //using (File.Create(@"d:\1.txt"))//创建完后,释放资源,不然会报错。 4 //{ } 5 //File.Delete(@"d:\1.txt"); 6 //File.Move(@"d:\1.txt", @"e:\1.txt"); 7 //File.Copy(@"d:\1.txt", @"e:\1.txt",true); 8 9 //File.WriteAllText(@"d:\1.txt", "哈哈哈", Encoding.Default);//如果不指定Encoding.Default那么写入的编码和读取的编码不一致,会导致乱码 10 //List<string> list = new List<string> {"aaa","bbbb","ccccc","dddd" }; 11 //File.WriteAllLines(@"d:\1.txt",list, Encoding.Default); 12 13 //File.AppendAllText(@"d:\1.txt", "eeeee", Encoding.Default); 14 //List<string> list = new List<string> {"eeee","ffff","gggg","eeee" }; 15 //File.AppendAllLines(@"d:\1.txt", list, Encoding.Default); 16 17 //string strRead = File.ReadAllText(@"d:\1.txt"); 18 //Response.Write(strRead); 19 20 //string[] arrStr = File.ReadAllLines(@"d:\1.txt"); 21 //foreach (var s in arrStr) 22 //{ 23 // Response.Write(s); 24 //} 25 }View Code
四、Directory类
方法名
作用
CreateDirectory
在指定路径创建所有目录和子目录
Delete
删除目录
Exists
路径是否存在
GetDirectories
获取指定目录中的子目录的名称
GetFiles
返回指定目录中文件的名称
GetFileSystemEntries
返回指定目录中所有文件和子目录的名称
GetParent
获取指定路径的父目录
Move
将文件或目录及其内容移到新的位置
Demo3
1 protected void Page_Load(object sender, EventArgs e) 2 { 3 //Directory.CreateDirectory(@"e:\1\2");//创建目录 4 //Directory.Move(@"e:\source", @"e:\1\2");//源文件夹和目标文件夹要求存在于同一个硬盘分区中否则会操作失败,文件夹1必须存在 5 //Directory.Delete(@"e:\1",true); 6 7 //string[] arr= Directory.GetDirectories(@"e:\360Downloads");//获取指定目录中的子目录 8 //foreach (var s in arr) 9 //{ 10 // Response.Write(s+"</br>"); 11 //} 12 13 //string[] arr = Directory.GetFiles(@"E:\360Downloads\Apk");//获取指定目录下的文件目录 14 //foreach (var s in arr) 15 //{ 16 // Response.Write(s + "</br>"); 17 //} 18 19 //string[] arr = Directory.GetFileSystemEntries(@"E:\360Downloads");//返回指定目录中所有文件和子目录的名称 20 //foreach (var s in arr) 21 //{ 22 // Response.Write(s + "</br>"); 23 //} 24 25 26 }View Code
五、DirectoryInfo类
是一个操作目录的实例类,提供了与静态类Directory类相同的方法,但是做了少部分扩展,当需要对目录进行多次操作的时候,最好是将该目录封装到实例对象中操作。
六、FileInfo类
是一个操作文件的实例类,提供了静态类File相同的方法,但是扩了扩展,如得到文件的大小等,当需要对文件进行多次操作的时候,最好是将文件封装到实例对象中操作。
Demo4
1 public partial class demo4 : System.Web.UI.Page 2 { 3 string path = @"F:\软谋\网站\ruanmou\web"; 4 FileInfo info = null; 5 private StringBuilder sb = new StringBuilder(); 6 public string GetRightPart() 7 { 8 string s = sb == null ? "" : sb.ToString(); 9 return s; 10 } 11 protected void Page_Load(object sender, EventArgs e) 12 { 13 if (!IsPostBack) 14 { 15 SmartTreeView1.Nodes.Clear(); 16 LoadTree(path); 17 } 18 } 19 20 protected void SmartTreeView1_SelectedNodeChanged(object sender, EventArgs e) 21 { 22 string path = SmartTreeView1.SelectedNode.Target.ToString(); 23 if (!string.IsNullOrEmpty(path)) 24 { 25 string[] files = Directory.GetFiles(path); 26 sb.Append(@" <table class=""table table-bordered"" data-resizable-columns-id=""demo-table"">"); 27 sb.Append(@"<tr> 28 <th data-resizable-column-id=""first_name"">文件名</th> 29 <th data-resizable-column-id=""last_name"">大小</th> 30 <th data-resizable-column-id=""username"" data-noresize>时间</th> 31 </tr>"); 32 foreach (var file in files) 33 { 34 info = new FileInfo(file); 35 string sName = Path.GetFileName(file); 36 string sSize = info.Length.ToString(); 37 string sCreateTime = info.CreationTime.ToString(); 38 sb.Append(string.Format("<tr><td>{0}</td><td>{1}</td><td>{2}</td></tr>", sName, sSize, sCreateTime)); 39 TreeNode node = new TreeNode(); 40 node.Text = sName; 41 SmartTreeView1.SelectedNode.ChildNodes.Add(node); 42 } 43 sb.Append("</table>"); 44 } 45 } 46 47 public void LoadTree(string path, TreeNode node=null) 48 { 49 string[] dirs = Directory.GetDirectories(path); 50 foreach (var dir in dirs) 51 { 52 TreeNode node1 = new TreeNode(Path.GetFileName(dir)); 53 node1.Target = dir; 54 if (node == null) 55 { 56 SmartTreeView1.Nodes.Add(node1); 57 } 58 else 59 { 60 node.ChildNodes.Add(node1); 61 } 62 if (Directory.GetDirectories(dir).Length > 0) 63 { 64 LoadTree(dir, node1);//递归算法 65 } 66 } 67 } 68 }View Code
七、Stream类
Demo5
1 /// <summary> 2 /// 读 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 protected void Button1_Click(object sender, EventArgs e) 7 { 8 //读文件 9 //创建一个文件流对象 10 //using (FileStream stream = new FileStream(@"d:\2.txt", FileMode.Open)) 11 //{ 12 // //准备一个byte数组,以供文件流对象读取数据并放到这个数组里面 13 // byte[] buffer = new byte[1024 * 1024];//1m大小 14 // //调用文件流的读数据方法,将读出来的字节放到buffer数组中 15 // stream.Read(buffer, 0, buffer.Length); 16 // //将字节数组转成字符串 17 // string content = Encoding.Default.GetString(buffer); 18 // Response.Write(content); 19 //} 20 } 21 22 /// <summary> 23 /// 写 24 /// </summary> 25 /// <param name="sender"></param> 26 /// <param name="e"></param> 27 protected void Button2_Click(object sender, EventArgs e) 28 { 29 //写文件 30 //创建文件流对象 31 using (FileStream stream = new FileStream(@"d:\2.doc", FileMode.Open)) 32 { 33 //调用文件流写入的方法 34 string content = TextBox1.Text; 35 //将字符串以指定的编码转换为字节数组 36 byte[] buffer = Encoding.UTF8.GetBytes(content); 37 stream.Write(buffer, 0, buffer.Length); 38 } 39 } 40 41 /// <summary> 42 /// 大数据拷贝 43 /// </summary> 44 /// <param name="sender"></param> 45 /// <param name="e"></param> 46 protected void Button3_Click(object sender, EventArgs e) 47 { 48 using (FileStream streamReader = new FileStream(@"d:\1.wmv", FileMode.Open)) 49 { 50 using (FileStream streamWriter = new FileStream(@"e:\1.wmv", FileMode.Create)) 51 { 52 byte[] data = new byte[1024 * 1024 * 2];//一次读两兆 53 int length = data.Length; 54 do 55 { 56 length = streamReader.Read(data, 0, data.Length);//此处的0表示它会按照上一次读取完的位置开始读,而不是又从头开始读,length表示实际读的长度 57 streamWriter.Write(data, 0, length); 58 } 59 while (length == data.Length); 60 } 61 } 62 }View Code
八、using
1、如果一个对象要被using管理,这个对象的类必须实现IDisposeable接口。
2、using本质其实就是一个try-finally,将using中的代码生成在try中,Dispose方法写在finally中,所以Dispose方法无论如何都会调用。
------------------------------------------------------------------------------------------------------------------------------------------
软谋在线教育,最适合大学生、上班族的在线软件培训,主要教授asp.net动态网站制作,yy教育房间远程实时授课,每节课录制成高清视频课后分享,老师白天八小时全职在线辅导,不懂就问。加qq群:138800420 即可免费试听。