博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 实现导出网站功能
阅读量:6449 次
发布时间:2019-06-23

本文共 3997 字,大约阅读时间需要 13 分钟。

   这个导出网站功能指通过前台javascript触发进入ashx函数中,实现将服务器中某个文件夹(包含其子文件夹和文件)通通复制到服务器中另一处位置,当然该文件夹本身就是一个网站。

  所以导出网站最重要的两个功能,除了javascript的触发,就是C#ashx文件复制文件夹的操作。

  下面这段代码就是通过javascript的Request函数调用copy.ashx函数文件,实现将需要复制的文件夹的子路径和复制到所在位置的子路径的两个参数传进去后台函数

    getWebList函数就是后台的一个函数,这个函数可以不用管他。

   getBack函数就需要写上,可以通过这个函数获取结果。

  当然Webside_load这个函数也是需要onclick触发过来的,这里就不全部列出来了。

 

 

1 //Webside_load导出网站 2 function Webside_load(sID, iWebTemplateID) {
//alert(0); 3 //alert(sID); alert(iWebTemplateID); 4 //被赋值的目录:就是模板ID下的文件夹以及文件 5 sTartDir = "http://www.cnblogs.com/uploadfile/webTemplate/" + iWebTemplateID; 6 //目标目录:就是作品ID下 7 sEndDir = "http://www.cnblogs.com/uploadfile/showweb/" + sID + "/"; 8 //alert(sourceDir); alert(targetDir); 9 10 var variable = ["sTartDir", "sEndDir"];11 var value = [sTartDir, sEndDir]; //alert(value);12 Request("getWebList", variable, value, getBack, WebUrl + "http://www.cnblogs.com/copy.ashx", svrNamespace);13 14 }15 function getBack() {16 var xmlhttp = xmlHttpRequest;17 var Result = xmlhttp.responseText;18 alert(Result);19 }20

通过上面的javascript,可以获取来自后台函数的数据。

而获取后台函数的数据就需要下面关于遍历加copy的函数文件了。

这个函数我也百度了一下,了解了一写方法之后才写出,度娘还是很强大的,看到了很多人很多好的方法,但感觉下面这种方法比较可取。

1 <%@ WebHandler Language="C#" Class="copy" %> 2  3 using System; 4 using System.Web; 5 using System.IO; 6  7 public class copy : IHttpHandler 8 { 9     //采用递归的方式遍历,文件夹和子文件中的所有文件。10     public void ProcessRequest(HttpContext context)11     {12         HttpRequest Request = context.Request;13         HttpResponse Response = context.Response;14         HttpServerUtility Server = context.Server;15         //指定输出头和编码16         context.Response.ContentType = "text/html";17         Response.Charset = "utf-8";18 19         HttpFileCollection fs = HttpContext.Current.Request.Files;20         21         string sTartDir = Request.Form["sTartDir"];22         string sEndDir = Request.Form["sEndDir"];23         sTartDir = System.Web.HttpContext.Current.Server.MapPath(sTartDir);24         sEndDir = System.Web.HttpContext.Current.Server.MapPath(sEndDir);25         //Test26         //string sTartDir = System.Web.HttpContext.Current.Server.MapPath("../uploadfile/webTemplate/2");27         //string sEndDir = System.Web.HttpContext.Current.Server.MapPath("../uploadfile/showweb/2012082700000001/");28         MyDirectory_Copy(sTartDir, sEndDir);29         30         Response.Write("成功导出!");31     }32     33     static void MyDirectory_Copy(string sTartDir, string sEndDir)34     {35         //判断两个目录是否都是存在的36         if (!Directory.Exists(sTartDir))37             return;38         if (!Directory.Exists(sEndDir))39             return;40 41         //获取文件夹名字42         string sTarteFolderName = sTartDir.Replace(Directory.GetParent(sTartDir).ToString(), "").Replace(Path.DirectorySeparatorChar.ToString(), "");43         //判断是否该文件夹赋值成功44         if (sTartDir == sEndDir + sTarteFolderName)45             return;46 47         //要复制到的路径 48         string endPath = sEndDir + Path.DirectorySeparatorChar.ToString() + sTarteFolderName;49         if (Directory.Exists(endPath))50         {51             Directory.Delete(endPath, true);52         }53 54         Directory.CreateDirectory(endPath);55 56         //复制文件 57         string[] files = Directory.GetFiles(sTartDir);58         for (int i = 0; i < files.Length; i++)59         {60             File.Copy(files[i], endPath + Path.DirectorySeparatorChar.ToString() + Path.GetFileName(files[i]));61         }62         //复制目录 63         string[] dires = Directory.GetDirectories(sTartDir);64         for (int j = 0; j < dires.Length; j++)65         {66             MyDirectory_Copy(dires[j], endPath);67         }68     } 69 70   71 72     public bool IsReusable73     {74         get75         {76             return false;77         }78     }   79 }

 

从前台获得sTartDir源文件目录和 sTartDir目标目录,得到他们的绝对路径。

再执行DirectoryCopy函数,

获得源文件的文件夹名字,将目标文件的绝对路径加上文件夹名赋给新的目标文件目录

通过递归循环判断,执行复制过程。

 

这种方法类似于之前一随便种所提到的C#遍历文件夹,不过这里是内部便利复制,和在系统中遍历也不是完全一样。这个相对比较简单,不过一开始还是借助了度娘百度搜索了一下方法。

你可能感兴趣的文章
Go 语言对 Android 原生应用开发的支持情况
查看>>
《沟通的技术——让交流、会议与演讲更有效》一1.1 一切尽在计划之中
查看>>
Firefox 44 浏览器内建更好的 SSL 错误指示器
查看>>
《数据科学:R语言实现》——2.9 使用twitteR
查看>>
《思科UCS服务器统一计算》一第2章 服务器架构2.1 处理器的演变
查看>>
微软概述 Islandwood 计划
查看>>
《CUDA C编程权威指南》——3.2节理解线程束执行的本质
查看>>
《深入理解Android》一导读
查看>>
linux查看登录用户及踢掉用户
查看>>
如何防止网站因改版导致权重下降?
查看>>
《伟大的计算原理》一大数据
查看>>
《UG NX8.0中文版完全自学手册》一导读
查看>>
Windows和Linux端rsync推拉同步时中文乱码解决方法
查看>>
《Spark核心技术与高级应用》——1.3节本章小结
查看>>
解决军哥lnmp一键包报错pycurl.so
查看>>
Google 搜索结果正式 AMP 化
查看>>
《树莓派Python编程入门与实战》——第2章 认识Raspbian Linux发行版 2.1 了解Linux...
查看>>
阿里感悟 (十七)- 计划和规划能力
查看>>
《Java并发编程从入门到精通》显示锁Lock和ReentrantLock
查看>>
《Servlet、JSP和Spring MVC初学指南》——1.12 小结
查看>>