自动生成HTML工具 (part 2:webClient)
2007-11-13 10:53
519 查看
webClient 是 System.Net的一个类,用于生成HTML。
流程大致是,用DownloadFileAsync 下载文件,保存成一个临时文件,在保存成功后,调用updateHtml 方法将临时文件覆盖目标文件,但是如果下载了一个0K的文件,就会调用webrequest方法去重试。
注意:wc.Encoding 设置输出的编码,如果错了,文件里面内容会乱码的。DownloadFileAsync 方法 生成html文件,但是这里要注意的是第三个参数,这个参数是为了异步过程中传递的参数,在wc_DownloadFileCompleted 中的 e.UserState 使用,可惜官网 没有 这个方法的例子,是看了ARM后 才知道的。
using (WebClient wc = new WebClient())
...{
switch (r.Encoding)
...{
case "UTF-8":
wc.Encoding = Encoding.UTF8;
break;
case "GB2312":
wc.Encoding = Encoding.GetEncoding("gb2312");
break;
default:
break;
}
//url有效
if (!System.IO.Directory.Exists(Path.GetDirectoryName(r.savepath)))
...{
//目录不存在,自动创建
System.IO.Directory.CreateDirectory(Path.GetDirectoryName(r.savepath));
}
string newFile = Path.Combine(Path.GetDirectoryName(r.savepath), Path.GetFileNameWithoutExtension(r.savepath) + TaskFactory.GUID + Path.GetExtension(r.savepath));
//异步
wc.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(wc_DownloadFileCompleted);
//生成页面
wc.DownloadFileAsync(new Uri(r.url), newFile, new string[] ...{ r.savepath, newFile, r.url,r.Encoding });
}
完成时调用方法
private static void wc_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
...{
string[] arr = e.UserState as string[];
//更新html
bool retry = updateHtml(arr[0], arr[1], arr[2]);
if (retry)
...{
//需要重试的,使用webrequest 去获取html
Trace.Message("重试:" + arr[2]);
try
...{
createHtmlByWebRequest(arr[0], arr[1], arr[2], arr[3]);
}
catch (Exception ex)
...{
Trace.Error(ex);
}
}
}
流程大致是,用DownloadFileAsync 下载文件,保存成一个临时文件,在保存成功后,调用updateHtml 方法将临时文件覆盖目标文件,但是如果下载了一个0K的文件,就会调用webrequest方法去重试。
注意:wc.Encoding 设置输出的编码,如果错了,文件里面内容会乱码的。DownloadFileAsync 方法 生成html文件,但是这里要注意的是第三个参数,这个参数是为了异步过程中传递的参数,在wc_DownloadFileCompleted 中的 e.UserState 使用,可惜官网 没有 这个方法的例子,是看了ARM后 才知道的。
using (WebClient wc = new WebClient())
...{
switch (r.Encoding)
...{
case "UTF-8":
wc.Encoding = Encoding.UTF8;
break;
case "GB2312":
wc.Encoding = Encoding.GetEncoding("gb2312");
break;
default:
break;
}
//url有效
if (!System.IO.Directory.Exists(Path.GetDirectoryName(r.savepath)))
...{
//目录不存在,自动创建
System.IO.Directory.CreateDirectory(Path.GetDirectoryName(r.savepath));
}
string newFile = Path.Combine(Path.GetDirectoryName(r.savepath), Path.GetFileNameWithoutExtension(r.savepath) + TaskFactory.GUID + Path.GetExtension(r.savepath));
//异步
wc.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(wc_DownloadFileCompleted);
//生成页面
wc.DownloadFileAsync(new Uri(r.url), newFile, new string[] ...{ r.savepath, newFile, r.url,r.Encoding });
}
完成时调用方法
private static void wc_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
...{
string[] arr = e.UserState as string[];
//更新html
bool retry = updateHtml(arr[0], arr[1], arr[2]);
if (retry)
...{
//需要重试的,使用webrequest 去获取html
Trace.Message("重试:" + arr[2]);
try
...{
createHtmlByWebRequest(arr[0], arr[1], arr[2], arr[3]);
}
catch (Exception ex)
...{
Trace.Error(ex);
}
}
}
相关文章推荐
- 自动生成HTML工具 (part 1:序)
- 自动生成HTML工具 (part 5:windows 服务)
- 自动生成HTML工具 (part 3:WebRequest)
- 自动生成HTML工具 (part 6:config 文件读写)
- 自动生成HTML工具 (part 4:log4net)
- 自动生成HTML工具 (part 7:dataset 和 object)
- 根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第9版)
- 日志在线自动生成工具
- ibatis - 自动代码生成工具abator 使用介绍
- 关于HTML静态页面(含自动分页)生成的可行性方案
- mybatis-generator 代码自动生成工具(maven方式)
- 七个CSS3代码自动生成工具让你提升前端开发速度
- PHP 自动生成帮助文档工具1.0Beta版【代码维护神器】
- 使用Mybatis生成工具自动生成实体类和对应的mapper映射文件以及接口文件
- mybatis 自动生成工具
- Android开发常用-Json(GSON)自动生成实体类工具
- Makefile自动生成工具
- 利用在线工具根据JSon数据自动生成对应的Java实体类
- mybatis-generator 代码自动生成工具(maven方式)
- 数据库表结构文档自动生成工具