C#遍歷文件夾後上傳文件夾中一切文件毛病案例剖析。本站提示廣大學習愛好者:(C#遍歷文件夾後上傳文件夾中一切文件毛病案例剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是C#遍歷文件夾後上傳文件夾中一切文件毛病案例剖析正文
asp.net是沒有直接拔取文件夾的控件的,我也不曉得,假如年夜家有的話可以一路交換下。後來我想著應當有三種辦法:
①先將文件夾緊縮後上傳辦事器,然後再辦事器上解壓;
②取得文件夾名及目次,然後遍歷文件夾上面的文件和子文件夾,輪回上傳;
③是應用AcitiveX控件。
那我武斷就先經由過程上傳對話框取得文件夾名和文件夾地點的體系文件途徑,可是接上去就驚惶了,一開端是想應用javascript遍歷文件夾的
1 var fso = new ActiveXObject("Scripting.FileSystemObject");
2 var f = fso.GetFolder(document.all.fixfolder.value);
3 var fc = new Enumerator(f.files);
然則發明遍歷不了,才得知要想創立FSO對象,操作文件,必需對該文件要有足夠的權限才行,如許太費事了,因而我采用用C#來遍歷文件夾,經由過程寫一個ashx文件,在html裡經由過程action將閱讀的數據傳送過去
以下是C#遍歷文件夾以後上傳文件夾下的一切文件援用片斷:
<%@ WebHandler Language="C#" Class="folder" %> using System; using System.Web; using System.IO; public class folder : IHttpHandler { //采取遞歸的方法遍歷,文件夾和子文件中的一切文件。 public void ProcessRequest(HttpContext context) { HttpRequest Request = context.Request; HttpResponse Response = context.Response; HttpServerUtility Server = context.Server; //指定輸入頭和編碼 Response.ContentType = "text/html"; Response.Charset = "utf-8"; HttpFileCollection fs = HttpContext.Current.Request.Files; string newFilePath = Request.Form["sPath"]; if(fs.Count>0) { //fs[0]對應FindFile的dirPath就是指定目次,newFilePath相對贏svrPath就是目的目次,也就是辦事器上的目次 FindFile(fs[0].ToString(), newFilePath); } Response.Write("<script>parent.FileUploadDeal()</script>"); } //采取遞歸的方法遍歷,文件夾和子文件中的一切文件。 public void FindFile(string dirPath,string svrPath) //參數dirPath為指定的目次,svrPath是目的目次 { //目的目次,也就是辦事器上的目次 string sFilePath = System.Web.HttpContext.Current.Server.MapPath(svrPath); //string sFilePath = System.Web.HttpContext.Current.Server.MapPath(Request.Form["svrPath"]); //創立文件夾 if (!Directory.Exists(sFilePath)) Directory.CreateDirectory(sFilePath); //在指定目次及子目次下查找文件 DirectoryInfo Dir=new DirectoryInfo(dirPath); try { foreach(DirectoryInfo d in Dir.GetDirectories())//查找子目次 { FindFile(Dir+d.ToString()+"\\",svrPath+d.ToString()+"\\"); //FindFile(Dir+d.ToString()+"\",svrPath+d.ToString()+"\"); } foreach(FileInfo f in Dir.GetFiles()) //查找文件 { //f.SaveAs(Server.MapPath(svrPath + f.ToString()));//假如要保留到其他處所,留意修正這裡 f.CopyTo(System.Web.HttpContext.Current.Server.MapPath(svrPath + f.ToString()), true); HttpContext.Current.Response.Write("4554132"); } } catch(Exception e) { ; } } public bool IsReusable { get { return false; } } }
本來認為如許便可以到達後果,然則卻發明了一個致命的成績!由於Fileupload控件自己是不支撐文件夾的上傳,即便經由過程ashx也沒法賦值給它。經由過程懂得更多材料,得知,因為平安性緣由,弗成能直接在閱讀器上經由過程代碼直接上傳當地文件夾,必需經由過程ActiveX控件能力完成。
從平安權限來剖析,確切也是不許可的,不然我寫一個網頁,外面嵌入這段js代碼,你一翻開這個網頁,js便可以開端漸漸的去遍歷你的硬盤,把你的文件都上傳到辦事器。只要用戶經由過程input控件本身選擇的文件,才許可上傳。
本文只是小編停止處理成績的一個思緒其實不是一個准確的辦法,目標在於和年夜家停止進修交換,取得更好的處理方法。