C#学习记录9——Streams数据流
2015-05-09 20:40
267 查看
C#中数据流的功能非常的多,在文件夹目录浏览,读入写出文件,异步IO,异步网络编程等都可以用到
1. 递归显示目录
结果
![](http://images.cnitblog.com/blog2015/731435/201505/092018270797870.png)
![](http://images.cnitblog.com/blog2015/731435/201505/092018412204418.png)
上面结果中,放括号中就是目录的层级。在代码中是通过indentLevel来实现的。
注意,真正使用时,应该使用try,catch。原因是,这里有一个可预测/难以避免的问题:对文件夹的访问权限。不加try运行的话,遇到无法访问的文件夹时,会出现exception停止运行。
2.对文件进行读写操作
结果 test2.txt中内容与test.txt中相同。
同样要注意,reader和writer的路径是否有效
3.读入网页内容
![](http://images.cnitblog.com/blog2015/731435/201505/092034132356481.png)
可以发现返回的结果是html文件。
注意的还是request的网址是否有效或内否达到(youtube等会有exception)
从上面的例子中可以非常容易地看出,要常注意指向路径是否有效,常用try catch
1. 递归显示目录
using System; using System.Collections.Generic; using System.IO; using System.Text; namespace StreamTester { class Tester { static int dirCounter = 1; static int indentLevel = -1; public static void Main() { Tester t = new Tester(); // 选择根目录 string theDirectory = Environment.GetEnvironmentVariable("SystemRoot"); // 如果是在unix linux 等其他系统下,要加下面一句话 //string theDirectory = "/tmp"; //下面调用方法来浏览该目录,显示数据及子目录 DirectoryInfo dir = new DirectoryInfo(theDirectory); t.ExploreDirectory(dir); Console.WriteLine( "\n\n{0} directories found.\n", dirCounter); } // 只要找到一个目录就递归的递归的调用自己 private void ExploreDirectory(DirectoryInfo dir) { indentLevel++; // 目录层次++ for (int i = 0; i < indentLevel; i++) Console.Write(" "); Console.WriteLine("[{0}] {1} [{2}]\n", indentLevel, dir.Name, dir.LastAccessTime); // 得到dir下的所有子目录存入directories[]中 DirectoryInfo[] directories = dir.GetDirectories(); foreach (DirectoryInfo newDir in directories) { dirCounter++; ExploreDirectory(newDir); // 递归调用 } indentLevel--; //目录层次-- } } }
结果
![](http://images.cnitblog.com/blog2015/731435/201505/092018270797870.png)
![](http://images.cnitblog.com/blog2015/731435/201505/092018412204418.png)
上面结果中,放括号中就是目录的层级。在代码中是通过indentLevel来实现的。
注意,真正使用时,应该使用try,catch。原因是,这里有一个可预测/难以避免的问题:对文件夹的访问权限。不加try运行的话,遇到无法访问的文件夹时,会出现exception停止运行。
2.对文件进行读写操作
private void Run() { // 打开文件 FileInfo theSourceFile = new FileInfo( @"C:\Users\shanyuwang\Desktop\test.txt"); // 创建text reader StreamReader reader = theSourceFile.OpenText(); // 创建text writer StreamWriter writer = new StreamWriter( @"C:\Users\shanyuwang\Desktop\test2.txt", false); string text; // 每次读入一行并写入text,writer do { text = reader.ReadLine(); writer.WriteLine(text); Console.WriteLine(text); } while (text != null); // 关闭文件。建议养成的好习惯,避免在后续程序中对文件误操作 reader.Close(); writer.Close(); }
结果 test2.txt中内容与test.txt中相同。
同样要注意,reader和writer的路径是否有效
3.读入网页内容
public class Client { static public void Main(string[] Args) { // http request请求 HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create ("http://www.baidu.com/"); // httq response HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); // 对response的返回内容读入 StreamReader streamReader = new StreamReader( webResponse.GetResponseStream(), Encoding.ASCII); try { string outputString; outputString = streamReader.ReadToEnd(); Console.WriteLine(outputString); } catch { Console.WriteLine("Exception reading from web page"); } streamReader.Close(); Console.ReadKey(); } }
![](http://images.cnitblog.com/blog2015/731435/201505/092034132356481.png)
可以发现返回的结果是html文件。
注意的还是request的网址是否有效或内否达到(youtube等会有exception)
从上面的例子中可以非常容易地看出,要常注意指向路径是否有效,常用try catch
相关文章推荐
- C#+emgucv学习过程记录之图像
- C#学习日常记录
- 学习C#的第一个程序:笔记查找与记录
- C# ASP.NET 学习记录
- C#学习记录(六)--------HTML中target
- C#学习记录(七)--------------AD操作
- 无聊的学习记录---C# 起步
- 转载 张子阳 学习记录 c#网络编程
- C#学习之System.Collections.Generic 与 System.Collections 记录
- C#学习记录1(数据类型,变量,表达式)
- 记录我C#的学习过程
- 学习记录 用C#.net 加 asp.net发送带附件邮件
- 20100626 学习记录:奇怪的stringbuilder && 过滤字符串中的非数字字符 && C#中Trim()、TrimStart()、TrimEnd()的错误认识
- 转载张子阳 学习记录 c#网络编程 4
- C#使用Log4Net记录日志(想直接转载的,但是不支持转到这上面来,复制来的,作者勿怪,学习用)
- C#学习问题记录
- Java与C#的比较学习记录
- Linux学习记录--数据流重定向
- C#学习记录
- C#学习记录(四)------分页虚基类