您的位置:首页 > 编程语言 > C#

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

2015-05-09 20:40 267 查看
C#中数据流的功能非常的多,在文件夹目录浏览,读入写出文件,异步IO,异步网络编程等都可以用到

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--; //目录层次--
}
}
}


结果





上面结果中,放括号中就是目录的层级。在代码中是通过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();
}
}




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

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

从上面的例子中可以非常容易地看出,要常注意指向路径是否有效,常用try catch
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: