winform复制文件到指定目录

执行步骤

  1. 弹出选择对话框:var openFileDialog = new OpenFileDialog();
  2. 设置选择内容,如所有图片:openFileDialog.Filter="图像文件 (*.bmp;*.ico;*.gif;*.jpeg;*.jpg;*.png)|*.bmp;*.ico;*.gif;*.jpeg;*.jpg;*.png";
  3. 获取选择的路径集合:openFileDialog.FileNames
  4. 复制文件:File.Copy(sourcePath,targetPath);//目录重命名见下面代码

1. 打开图片选择对话框

默认为多选,返回选择的文件路径集合,可使用FirstOrDefault()方法判断是否选择了文件

//打开文件对话框并获取选择的文件
private List<string> OpenImagesDialog(bool isMulti = true)
{
    var openFileDialog = new OpenFileDialog();
    const string imgExts = "图像文件 (*.bmp;*.ico;*.gif;*.jpeg;*.jpg;*.png)|*.bmp;*.ico;*.gif;*.jpeg;*.jpg;*.png";
    openFileDialog.Filter = imgExts;//可选择的文件格式 (|之前为显示,之后为控制后缀显示)
    openFileDialog.Multiselect = isMulti;//多选设置
    openFileDialog.RestoreDirectory = true;
    openFileDialog.FilterIndex = 1;
    var result = new List<string>();
    if (openFileDialog.ShowDialog() == DialogResult.OK)
    {
        result.AddRange(openFileDialog.FileNames);
    }
    return result;
}

2.复制文件到指定目录

将传递的文件复制到指定目录并以Guid重命名,目录不存在则自动创建 使用元组返回对应路径键值对(Item1)及失败路径集合(Item2)

  /// <summary>
  /// 复制文件到指定目录并重命名
  /// </summary>
  /// <param name="sourcePaths">要复制的文件路径集合</param>
  /// <param name="targetDir">目标目录</param>
  /// <returns>Item1:对应路径,Item2:失败文件路径</returns>
  public static Tuple<Dictionary<string, string>, List<string>> CopyFileToDir(List<string> sourcePaths, string targetDir)
  {
      if (!Directory.Exists(targetDir))
      {
          Directory.CreateDirectory(targetDir);
      }
      var errorFiles = new List<string>();
      var saveDirs = new Dictionary<string, string>();
      sourcePaths.ForEach(item =>
      {
          //路径不存在或者路径已存在则失败
          if (!File.Exists(item) || saveDirs.ContainsKey(item))
          {
              errorFiles.Add(item);
          }
          else
          {
              var saveName = Guid.NewGuid() + Path.GetExtension(item);
              var savePath = Path.Combine(targetDir, saveName);
              File.Copy(item, savePath);
              saveDirs.Add(item, savePath);
          }
      });
      var result = new Tuple<Dictionary<string, string>, List<string>>(saveDirs, errorFiles);
      return result;
  }

调用示例 ( AppendLogMsg 为追加日志方法)

  var selectImgs = OpenImagesDialog(true);//打开文件对话框并获取选择的所有文件
  var result = FileHelper.CopyFileToDir(selectImgs, txtSaveDir.Text);
  //result.Item1 [{源文件路径:目标路径}]
  //result.Item2 [失败路径1,失败路径2]

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大内老A

WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构

细算起来,已经有好几个月没有真正的写过文章了。近半年以来,一直忙于我的第一本WCF专著《WCF技术剖析》的写作,一直无暇管理自己的Blog。到目前为止《WCF技...

29070
来自专栏网络

HttpClient使用心得

做过Java web开发的朋友们,应该大部分都用过Apatch HttpClient工具类库,最近在维护公司一个老项目时,遇到了由于HttpClient使用不当...

43790
来自专栏hotqin888的专栏

DOC文件中法规对标系统完成

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

8510
来自专栏哲学驱动设计

asp.net MVC 应用程序的生命周期

  首先我们知道http是一种无状态的请求,他的生命周期就是从客户端浏览器发出请求开始,到得到响应结束。那么MVC应用程序从发出请求到获得响应,都做了些什么呢?

12730
来自专栏葡萄城控件技术团队

ASP.NET MVC 5 - 给数据模型添加校验器

在本节中将会给Movie模型添加验证逻辑。并且确保这些验证规则在用户创建或编辑电影时被执行。 拒绝重复 DRY ASP.NET MVC 的核心设计信条之一是DR...

22970
来自专栏哲学驱动设计

asp.net MVC 应用程序的生命周期

  首先我们知道http是一种无状态的请求,他的生命周期就是从客户端浏览器发出请求开始,到得到响应结束。那么MVC应用程序从发出请求到获得响应,都做了些什么呢?

12810
来自专栏葡萄城控件技术团队

Asp.Net MVC4入门指南(6):验证编辑方法和编辑视图

在本节中,您将开始修改为电影控制器所新加的操作方法和视图。然后,您将添加一个自定义的搜索页。 在浏览器地址栏里追加/Movies, 浏览到Movies页面。并进...

307100
来自专栏哲学驱动设计

asp.net MVC 应用程序的生命周期

  首先我们知道http是一种无状态的请求,他的生命周期就是从客户端浏览器发出请求开始,到得到响应结束。那么MVC应用程序从发出请求到获得响应,都做了些什么呢?...

20890
来自专栏大内老A

Enterprise Library深入解析与灵活应用(2): 通过SqlDependency实现Cache和Database的同步

对于一个真正的企业级的应用来说,Caching肯定是一个不得不考虑的因素,合理、有效地利用Caching对于增强应用的Performance(减少对基于Pers...

24270
来自专栏小特工作室

1分钟生成Net对象的注释

      我们在开发过程中,肯定会有几个项目作为基础项目,存放一些比较常用的类和方法,供其他项目使用.一般来说,方法实现以后,就不想再去管它了,以致于新加入的...

21960

扫码关注云+社区

领取腾讯云代金券