C#学习记录9——Streams数据流

C#中数据流的功能非常的多,在文件夹目录浏览,读入写出文件,异步IO,异步网络编程等都可以用到

1. 递归显示目录

 1 using System;
 2 using System.Collections.Generic;
 3 using System.IO;
 4 using System.Text;
 5
 6 namespace StreamTester
 7 {
 8     class Tester
 9     {
10         static int dirCounter = 1;
11         static int indentLevel = -1;
12
13         public static void Main()
14         {
15             Tester t = new Tester();
16
17             // 选择根目录
18             string theDirectory =
19             Environment.GetEnvironmentVariable("SystemRoot");
20             // 如果是在unix linux 等其他系统下,要加下面一句话
21             //string theDirectory = "/tmp";
22
23             //下面调用方法来浏览该目录,显示数据及子目录
24
25             DirectoryInfo dir = new DirectoryInfo(theDirectory);
26
27             t.ExploreDirectory(dir);
28
29             Console.WriteLine(
30                 "\n\n{0} directories found.\n",
31                 dirCounter);
32         }
33
34         // 只要找到一个目录就递归的递归的调用自己
35
36         private void ExploreDirectory(DirectoryInfo dir)
37         {
38             indentLevel++; // 目录层次++
39
40             for (int i = 0; i < indentLevel; i++)
41                 Console.Write(" ");
42
43             Console.WriteLine("[{0}] {1} [{2}]\n",
44                 indentLevel, dir.Name, dir.LastAccessTime);
45
46             // 得到dir下的所有子目录存入directories[]中
47             DirectoryInfo[] directories = dir.GetDirectories();
48             foreach (DirectoryInfo newDir in directories)
49             {
50                 dirCounter++;
51                 ExploreDirectory(newDir); // 递归调用
52             }
53             indentLevel--; //目录层次--
54         }
55     }
56 }

结果

上面结果中,放括号中就是目录的层级。在代码中是通过indentLevel来实现的。

注意,真正使用时,应该使用try,catch。原因是,这里有一个可预测/难以避免的问题:对文件夹的访问权限。不加try运行的话,遇到无法访问的文件夹时,会出现exception停止运行。

2.对文件进行读写操作

 1         private void Run()
 2         {
 3             // 打开文件
 4             FileInfo theSourceFile = new FileInfo(
 5                 @"C:\Users\shanyuwang\Desktop\test.txt");
 6
 7             // 创建text reader
 8             StreamReader reader = theSourceFile.OpenText();
 9
10             // 创建text writer
11             StreamWriter writer = new StreamWriter(
12                 @"C:\Users\shanyuwang\Desktop\test2.txt", false);
13
14             string text;
15
16             // 每次读入一行并写入text,writer
17             do
18             {
19                 text = reader.ReadLine();
20                 writer.WriteLine(text);
21                 Console.WriteLine(text);
22             } while (text != null);
23
24             // 关闭文件。建议养成的好习惯,避免在后续程序中对文件误操作
25             reader.Close();
26             writer.Close();
27         }

结果 test2.txt中内容与test.txt中相同。

同样要注意,reader和writer的路径是否有效

3.读入网页内容

 1 public class Client
 2     {
 3         static public void Main(string[] Args)
 4         {
 5             // http request请求
 6             HttpWebRequest webRequest =
 7                 (HttpWebRequest)WebRequest.Create
 8                     ("http://www.baidu.com/");
 9
10             // httq response
11             HttpWebResponse webResponse =
12                 (HttpWebResponse)webRequest.GetResponse();
13
14             // 对response的返回内容读入
15             StreamReader streamReader = new StreamReader(
16                 webResponse.GetResponseStream(), Encoding.ASCII);
17
18             try
19             {
20                 string outputString;
21                 outputString = streamReader.ReadToEnd();
22                 Console.WriteLine(outputString);
23             }
24             catch
25             {
26                 Console.WriteLine("Exception reading from web page");
27             }
28             streamReader.Close();
29             Console.ReadKey();
30         }
31     }

可以发现返回的结果是html文件。

注意的还是request的网址是否有效或内否达到(youtube等会有exception)

从上面的例子中可以非常容易地看出,要常注意指向路径是否有效,常用try catch

时间: 2025-01-01 21:07:23

C#学习记录9——Streams数据流的相关文章

《灰帽Python-黑客和逆向工程师的Python编程》学习记录

ctypes是Python语言的一个外部库,提供和C语言兼容的数据类型,可以很方便的调用C DLL中的函数. 操作环境:CentOS6.5 Python版本:2.66 ctypes是强大的,强大到本书以后介绍的几乎所有库都要基于此.使用它我们就能够调用动态链接库中函数,同时创建各种复杂的C数据类型和底层操作函数.毫无疑问,ctypes就是本书的基础. 第一章 搭建开发环境 1.3.2 使用动态链接库 from ctypes import * libc = CDLL("libc.so.6"

Python学习记录-2016-12-17

今日学习记录 模块: import os#导入os模块 import sys#导入sys模块 os.system("df -h")#执行df -h命令 cmd_res = os.popen("df -h").read()#将命令的返回结果赋值给cmd_res,如果不加入.read()会显示命令的返回加过在内存的位置 print(sys.path)#显示系统变量路径,一般个人模块位于site-packages下,系统模块位于lib下 print(sys.argu[2]

Objc基础学习记录5

NSMutableString类继承的NSString类. NSMutableString是动态的字符串. 1.appendingString 方式: 向字符串尾部添加一个字符串. 2.appendingFormat:可以添加多个类型的字符串. int,chat float,double等 3.stringWithString 创建字符串, 4.rangeOfString 返回str1在另一个字符串中的位置. 5.NSMakeRange(0,3) 字符串0位到3位. 6.deleteCharac

Windows API 编程学习记录&lt;二&gt;

恩,开始写Windows API编程第二节吧. 上次介绍了几个关于Windows API编程最基本的概念,但是如果只是看这些概念,估计还是对Windows API不是很了解.这节我们就使用Windows API 让大家来了解下Windows API的用法. 第一个介绍的Windows API 当然是最经典的MessageBox,这个API 的作用就是在电脑上显示一个对话框,我们先来看看这个API的定义吧: int WINAPI MessageBox(HWND hWnd, LPCTSTR lpTe

Windows API 编程学习记录&lt;三&gt;

恩,开始写API编程的第三节,其实马上要考试了,但是不把这节写完,心里总感觉不舒服啊.写完赶紧去复习啊       在前两节中,我们介绍了Windows API 编程的一些基本概念和一个最基本API函数 MessageBox的使用,在这节中,我们就来正式编写一个Windows的窗口程序. 在具体编写代码之前,我们必须先要了解一下API 编写窗口程序具体的三个基本步骤:             1. 注册窗口类:             2.创建窗口:             3.显示窗口: 恩,

Python学习记录day6

Python学习记录day6 学习 python Python学习记录day6 1.反射 2.常用模块 2.1 sys 2.2 os 2.3 hashlib 2.3 re 1.反射 反射:利用字符串的形式去对象(默认)中操作(寻找)成员 cat commons.py #!/usr/bin/env python#_*_coding:utf-8_*_''' * Created on 2016/12/3 21:54. * @author: Chinge_Yang.''' def login(): pr

Python学习记录-2016-11-29

今日学习记录: 心灵鸡汤: 要有合适自己的目标,一个目标一个目标实现,切忌好高骛远: 最好的投资就是投资自己: 实现梦想 学习,学习,再学习: Talk is cheap. 从本身而言,余三十而立之年,从事测试行业7七年有余,一年半华为外包路由器,两年无线wifi测试,一年半网管软件测试,一年自动化测试经理,推行公司自动化测试进程,从开始的TCL,到现在的python,工欲善其事必先利其器,所以自己来学习,总体我认为我的目标是一直前进的,不断变化的,但是方向并没有大的错误,有些累,所以近期有些懈

程序的机械级表示学习记录

程序的机械级表示学习记录 X86的三代寻址方式 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全. 8086的分段模式. IA32的带保护模式的平坦模式. 对于机械级编程的两种重要抽象 ISA:机械级程序的格式和行为,定义为指令集体系结构,它定义了处理器状态.指令的格式,以及每条指令对状态的影响. 虚拟地址:机器级程序使用的存储器地址,提供的存储器模型看上去是一个非常大的数组.存储器系统的实际实现是将多个硬件存储器和操作系统软件组合起来的. 在GCC中获得汇编代码与反汇编 获得汇编代码:

python 系统地学习记录

由头: python值得一学. 尝试一下写学习记录,看看效果. 1.记录一些不熟悉或者重要的知识点. 2.记录一些遇到的问题,标签 Question. 书:python基础教程(第2版) Chapter 1:基础知识 本章的内容熟悉即可. 比较重要的是字符串,单双引号转义,str,repr... Time 1.5 h  2015.8.31 23:09 版权声明:本文为博主原创文章,未经博主允许不得转载.