C#导出网站功能实例代码讲解

作者:lijiao 时间:2023-09-15 03:15:36 

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

       下面这段代码就是通过javascript的Request函数调用copy.ashx函数文件,实现将需要复制的文件夹的子路径和复制到所在位置的子路径的两个参数传进去后台函数getWebList函数就是后台的一个函数,这个函数可以不用管他。getBack函数就需要写上,可以通过这个函数获取结果。当然Webside_load这个函数也是需要onclick触发过来的,这里就不全部列出来了。

以下是C#实现导出网站功能引用片段:


//Webside_load导出网站
function Webside_load(sID, iWebTemplateID) {//alert(0);
  //alert(sID); alert(iWebTemplateID);
  //被赋值的目录:就是模板ID下的文件夹以及文件
  sTartDir = "http://www.cnblogs.com/uploadfile/webTemplate/" + iWebTemplateID;
  //目标目录:就是作品ID下
  sEndDir = "http://www.cnblogs.com/uploadfile/showweb/" + sID + "/";
  //alert(sourceDir); alert(targetDir);

var variable = ["sTartDir", "sEndDir"];
  var value = [sTartDir, sEndDir]; //alert(value);
  Request("getWebList", variable, value, getBack, WebUrl + "http://www.cnblogs.com/copy.ashx", svrNamespace);

}
function getBack() {
  var xmlhttp = xmlHttpRequest;
  var Result = xmlhttp.responseText;
  alert(Result);
}

通过上面的javascript,可以获取来自后台函数的数据,而获取后台函数的数据就需要下面关于遍历加copy的函数文件了。

以下是引用片段:


<%@ WebHandler Language="C#" Class="copy" %>

using System;
using System.Web;
using System.IO;

public class copy : IHttpHandler
{
  //采用递归的方式遍历,文件夹和子文件中的所有文件。
  public void ProcessRequest(HttpContext context)
  {
    HttpRequest Request = context.Request;
    HttpResponse Response = context.Response;
    HttpServerUtility Server = context.Server;
    //指定输出头和编码
    context.Response.ContentType = "text/html";
    Response.Charset = "utf-8";

HttpFileCollection fs = HttpContext.Current.Request.Files;

string sTartDir = Request.Form["sTartDir"];
    string sEndDir = Request.Form["sEndDir"];
    sTartDir = System.Web.HttpContext.Current.Server.MapPath(sTartDir);
    sEndDir = System.Web.HttpContext.Current.Server.MapPath(sEndDir);
    //Test
    //string sTartDir = System.Web.HttpContext.Current.Server.MapPath("../uploadfile/webTemplate/2");
    //string sEndDir = System.Web.HttpContext.Current.Server.MapPath("../uploadfile/showweb/2012082700000001/");
    MyDirectory_Copy(sTartDir, sEndDir);

Response.Write("成功导出!");
  }

static void MyDirectory_Copy(string sTartDir, string sEndDir)
  {
    //判断两个目录是否都是存在的
    if (!Directory.Exists(sTartDir))
      return;
    if (!Directory.Exists(sEndDir))
      return;

//获取文件夹名字
    string sTarteFolderName = sTartDir.Replace(Directory.GetParent(sTartDir).ToString(), "").Replace(Path.DirectorySeparatorChar.ToString(), "");
    //判断是否该文件夹赋值成功
    if (sTartDir == sEndDir + sTarteFolderName)
      return;

//要复制到的路径
    string endPath = sEndDir + Path.DirectorySeparatorChar.ToString() + sTarteFolderName;
    if (Directory.Exists(endPath))
    {
      Directory.Delete(endPath, true);
    }

Directory.CreateDirectory(endPath);

//复制文件
    string[] files = Directory.GetFiles(sTartDir);
    for (int i = 0; i < files.Length; i++)
    {
      File.Copy(files[i], endPath + Path.DirectorySeparatorChar.ToString() + Path.GetFileName(files[i]));
    }
    //复制目录
    string[] dires = Directory.GetDirectories(sTartDir);
    for (int j = 0; j < dires.Length; j++)
    {
      MyDirectory_Copy(dires[j], endPath);
    }
  }

public bool IsReusable
  {
    get
    {
      return false;
    }
  }  
}

      从前台获得sTartDir源文件目录和 sTartDir目标目录,得到他们的绝对路径。再执行DirectoryCopy函数,获得源文件的文件夹名字,将目标文件的绝对路径加上文件夹名赋给新的目标文件目录通过递归循环判断,执行复制过程。

      这种方法类似于之前所提到的C#遍历文件夹,不过这里是内部遍历复制,和在系统中遍历也不是完全一样。

标签:C#,导出,网站功能
0
投稿

猜你喜欢

  • JAVA实现KMP算法理论和示例代码

    2021-08-06 07:13:44
  • 二叉搜索树实例练习

    2022-09-20 22:03:06
  • C#隐式/显示实现接口方法详解

    2022-01-02 02:06:30
  • 聊聊Redis二进制数组Bitmap

    2021-07-26 11:51:57
  • 基于Springboot实现JWT认证的示例代码

    2023-04-01 09:46:40
  • Sentinel源码解析入口类和SlotChain构建过程详解

    2022-06-14 18:29:50
  • jmeter中json提取器如何提取多个参数值

    2022-08-10 00:08:27
  • Android开发之图片压缩工具类完整实例

    2023-07-02 10:22:08
  • 详解WPF中的隧道路由和冒泡路由事件

    2023-03-01 07:59:49
  • unity3d实现七天签到功能

    2023-01-05 08:57:21
  • Android图片缓存之Bitmap详解(一)

    2021-10-24 15:45:08
  • springboot Interceptor拦截器excludePathPatterns忽略失效

    2023-08-11 19:44:46
  • Java线程池并发执行多个任务方式

    2023-08-14 16:26:03
  • C#格式化json字符串的方法分析

    2023-12-23 00:20:36
  • IDEA怎么生成UML类图的实现

    2023-12-07 15:40:21
  • java获取网络图片上传到OSS的方法

    2023-10-14 23:01:07
  • springboot jackson配置教程

    2021-12-10 20:47:16
  • Unity实现透视滑动列表

    2022-04-10 20:15:40
  • C#请求http向网页发送接收数据的方法

    2022-05-28 15:39:20
  • C#中ArrayList的使用方法

    2023-01-26 10:20:47
  • asp之家 软件编程 m.aspxhome.com