• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#遍历文件夹后上传文件夹中所有文件错误案例分析

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c站,c语言,欲情 c max,奔驰c200,85度c等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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;
     }
   }  
 }
</div>

原本以为这样就可以达到效果,但是却发现了一个致命的问题!因为Fileupload控件本身是不支持文件夹的上传,即使通过ashx也无法赋值给它。通过了解更多资料,得知,由于安全性原因,不可能直接在浏览器上通过代码直接上传本地文件夹,必须通过ActiveX控件才能实现。
从安全权限来分析,确实也是不允许的,否则我写一个网页,里面嵌入这段js代码,你一打开这个网页,js就可以开始慢慢的去遍历你的硬盘,把你的文件都上传到服务器。只有用户通过input控件自己选择的文件,才允许上传。
本文只是小编进行解决问题的一个思路并不是一个正确的方法,目的在于和大家进行学习交流,获得更好的解决办法。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C# 检索不区分大小写并高亮显示实例详解
  • C#实现Base64处理的加密解密,编码解码示例
  • C# SqlHelper应用开发学习
  • C#多线程经典示例(吃苹果)
  • C#使用Windows Service的简单教程(创建、安装、卸载、调试)
  • C# 6.0 的知识梳理
  • C#向PPT文档插入图片以及导出图片的实例
  • C#使用Jquery zTree实现树状结构显示 异步数据加载
  • C#清理非托管对象实例分析
  • C#双缓冲技术实例详解

相关文章

  • 2017-05-28C#生成随机数实例
  • 2017-05-28C#编写Windows服务实例代码
  • 2017-05-28C#简单实现在网页上发邮件的案例
  • 2017-05-28C#创建一个Word并打开的方法
  • 2017-05-28C#实现DataTable转换成IList的方法
  • 2017-05-28C#自定义字符串替换Replace方法实例
  • 2017-05-28C#中的Internal关键字小结
  • 2017-05-28C#组件系列 你值得拥有的一款Excel处理神器Spire.XLS
  • 2017-05-28C#身份证号码验证是否正确
  • 2017-05-28C# 重写ComboBox实现下拉任意组件的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 基于私钥加密公钥解密的RSA算法C#实现方法
    • C#定义并实现单链表实例解析
    • C#调用Oracle存储过程的方法
    • 使用GPS经纬度定位附近地点(某一点范围内查询)
    • C#.NET中如何批量插入大量数据到数据库中
    • VB.NET中Caching的使用方法
    • C#实现在listview中插入图片实例代码
    • vista和win7在windows服务中交互桌面权限问题解决方法:穿透Session 0 隔离
    • c#实现断点续传功能示例分享
    • WinForm ToolTip使用方法小结

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有