C#導出網(wǎng)站功能實例代碼講解
這個導出網(wǎng)站功能指通過前臺javascript觸發(fā)進入ashx函數(shù)中,實現(xiàn)將服務(wù)器中某個文件夾(包含其子文件夾和文件)通通復制到服務(wù)器中另一處位置,當然該文件夾本身就是一個網(wǎng)站。所以導出網(wǎng)站最重要的兩個功能,除了javascript的觸發(fā),就是C#ashx文件復制文件夾的操作。
下面這段代碼就是通過javascript的Request函數(shù)調(diào)用copy.ashx函數(shù)文件,實現(xiàn)將需要復制的文件夾的子路徑和復制到所在位置的子路徑的兩個參數(shù)傳進去后臺函數(shù)getWebList函數(shù)就是后臺的一個函數(shù),這個函數(shù)可以不用管他。getBack函數(shù)就需要寫上,可以通過這個函數(shù)獲取結(jié)果。當然Webside_load這個函數(shù)也是需要onclick觸發(fā)過來的,這里就不全部列出來了。
以下是C#實現(xiàn)導出網(wǎng)站功能引用片段:
//Webside_load導出網(wǎng)站 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,可以獲取來自后臺函數(shù)的數(shù)據(jù),而獲取后臺函數(shù)的數(shù)據(jù)就需要下面關(guān)于遍歷加copy的函數(shù)文件了。
以下是引用片段:
<%@ 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目標目錄,得到他們的絕對路徑。再執(zhí)行DirectoryCopy函數(shù),獲得源文件的文件夾名字,將目標文件的絕對路徑加上文件夾名賦給新的目標文件目錄通過遞歸循環(huán)判斷,執(zhí)行復制過程。
這種方法類似于之前所提到的C#遍歷文件夾,不過這里是內(nèi)部遍歷復制,和在系統(tǒng)中遍歷也不是完全一樣。
以上就是C#導出網(wǎng)站功能的全部內(nèi)容介紹,希望對大家的學習有所幫助。
相關(guān)文章
使用C#實現(xiàn)將CSV文件內(nèi)容裝配成對象列表
這篇文章主要為大家詳細介紹了如何使用C#實現(xiàn)將CSV文件內(nèi)容裝配成對象列表,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2023-12-12DevExpress實現(xiàn)GridControl刪除所有行的方法
這篇文章主要介紹了DevExpress實現(xiàn)GridControl刪除所有行的方法,對于C#初學者有一定的參考借鑒價值,需要的朋友可以參考下2014-08-08