当前位置: 首页 > 编程笔记 >

C#遍历文件夹后上传文件夹中所有文件错误案例分析

唐宏壮
2023-03-14
本文向大家介绍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控件自己选择的文件,才允许上传。
本文只是小编进行解决问题的一个思路并不是一个正确的方法,目的在于和大家进行学习交流,获得更好的解决办法。

 类似资料:
  • 本文向大家介绍Android 遍历文件夹中所有文件的实例代码,包括了Android 遍历文件夹中所有文件的实例代码的使用技巧和注意事项,需要的朋友参考一下 可以获得文件夹中所有文件的路径及文件名。 代码很简单,直接上车,车上再解释: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 问题内容: 我试图遍历并拾取目录中的文件,但是在实现它时遇到了一些麻烦。如何提取多个文件,然后将它们移动到另一个文件夹? 问题答案: 带回调的旧答案 您想要使用fs.readdir函数获取目录内容,并使用fs.rename函数实际执行重命名。如果您 需要 等待它们完成之后再运行代码,则这两个函数都具有同步版本。 我写了一个快速脚本来完成您所描述的。 在我的本地机器上测试。 更新:fs.promis

  • 本文向大家介绍C语言 实现遍历一个文件夹的所有文件,包括了C语言 实现遍历一个文件夹的所有文件的使用技巧和注意事项,需要的朋友参考一下 C语言 实现遍历一个文件夹的所有文件            最近学习C语言基础知识,有一个需求是需要遍历文件夹中的文件,对与这种很好实现,然后自己做了一个遍历所有文件的实现代码,做下记录: 实现代码: 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • 本文向大家介绍对python遍历文件夹中的所有jpg文件的实例详解,包括了对python遍历文件夹中的所有jpg文件的实例详解的使用技巧和注意事项,需要的朋友参考一下 python发现文件夹下所有的jpg文件,并且安装文件排放的顺序输出 glob模块是最简单的模块之一,内容非常少。用它可以查找符合特定规则的文件路径名。跟使用windows下的文件搜索差不多。查找文件只用到三个匹配符:”*”, “?

  • 本文向大家介绍Python 遍历子文件和所有子文件夹的代码实例,包括了Python 遍历子文件和所有子文件夹的代码实例的使用技巧和注意事项,需要的朋友参考一下 最近看ECShop到网上找资料,发现好多说明ECShop的文件结构不全面,于是想自己弄个出来。但这是个无聊耗时的工作,自己就写了个Python脚本,可以递归遍历目录下的所有文件和所有子目录,并将结果记录到一个.xml文件中(因为想使用Not

  • 问题内容: 我对Swift编程非常陌生,并且正在尝试遍历文件夹中的文件。我在这里查看了答案,并尝试将其转换为Swift语法,但未成功。 我得到的错误是: 我的目的是查看主文件夹中包含的所有子文件夹和文件,并找到所有具有特定扩展名的文件,然后对它们进行处理。 问题答案: 使用以下方法: