您的位置:首页 > Web前端 > HTML

自动生成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);


}


}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: