服务器D盘上传的文件过多,空间剩下很少了,于是想把里面部分文件,大概几万个文件转移到E盘,做了这个小工具。先查询出要转移的文件清单,保存在一个记事本中,如下所示:

接着读取文件名,一个个移动到指定目录中去,winform窗体布局及效果如下:

完整代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;namespace FileMoveTools
{public partial class Form1 : Form{public Form1(){InitializeComponent();}#region 目录        private void btnBrowseSrcDir_Click(object sender, EventArgs e){           using (FolderBrowserDialog dialog = new FolderBrowserDialog()){if (dialog.ShowDialog() == DialogResult.OK)txtSrcDir.Text = dialog.SelectedPath;}}private void btnBrowseFile_Click(object sender, EventArgs e){using (OpenFileDialog openFileDialog = new OpenFileDialog()){openFileDialog.Filter = "Text (*.txt)|*.txt;";openFileDialog.AddExtension = true;openFileDialog.RestoreDirectory = true;if (openFileDialog.ShowDialog() == DialogResult.OK){txtFile.Text = openFileDialog.FileName;}}  }private void btnSetDestDir_Click(object sender, EventArgs e){using (FolderBrowserDialog dialog = new FolderBrowserDialog()){if (dialog.ShowDialog() == DialogResult.OK)txtDestDir.Text = dialog.SelectedPath;}}#endregionprivate void btnOK_Click(object sender, EventArgs e){Thread mythread = new Thread(MoveFile);mythread.IsBackground = true;mythread.Start();    }private void MoveFile(){string srcDir = txtSrcDir.Text.Trim();string destDir = txtDestDir.Text.Trim();string files = txtFile.Text.Trim();#region 验证路径是否存在if (!Directory.Exists(srcDir)){statusMsg.Text = "要迁移的目录不存在";return;}if (!Directory.Exists(destDir)){statusMsg.Text = "迁移后的目录不存在";return;}if (!File.Exists(files)){statusMsg.Text = "文件清单不存!";return;}#endregionstatusMsg.Text = "文件开始迁移..";int count = 0;using (StreamReader sr = new StreamReader(files, Encoding.UTF8)){string strline = null;while ((strline = sr.ReadLine()) != null){long diskFreeSpace = GetHardDiskFreeSpace("D");if (diskFreeSpace <= 5){statusMsg.Text = "硬盘空间剩下5GB,停止迁移文件.";return;}string sourceFileName = srcDir + "/" + strline;string destFileName = destDir + "/" + strline;if (File.Exists(sourceFileName)){count++;statusMsg.Text = "当前迁移第 " + count + " 个文件";File.Move(sourceFileName, destFileName);}}}this.Invoke(new Action(() =>{statusMsg.Text = "迁移了 " + count + " 个文件,完成";}));  }///  <summary> /// 获取指定驱动器的剩余空间总大小(单位为GB) ///  </summary> ///  <param name="str_HardDiskName">只需输入代表驱动器的字母即可 </param> ///  <returns> </returns> private static long GetHardDiskFreeSpace(string str_HardDiskName){long freeSpace = new long();str_HardDiskName = str_HardDiskName + ":\\";System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives();foreach (System.IO.DriveInfo drive in drives){if (drive.Name == str_HardDiskName){freeSpace = drive.TotalFreeSpace / (1024 * 1024 * 1024);}}return freeSpace;} }
}

winform文件迁移工具相关推荐

  1. C# WinForm 文件上传下载

    /**//// <summary>         /// WebClient上传文件至服务器         /// </summary>         /// <p ...

  2. java文件迁移工具,Java的迁移

    我使用Hibernate的SchemaUpdate来执行与迁移相同的function. 这实际上比迁移更容易,因为每次启动应用程序时,都会检查数据库结构并将其与映射进行同步,因此不需要额外的耙:db: ...

  3. C# WinForm 文件夹选择控件 folderBrowserDialog 的应用实例

    上期文章<使用 C# 修改文件创建时间>中有文件夹选择控件,但并没有提到如何使用,所以这次主要是针对这个控件讲下如何使用的一些细节.就两个动作,请看下图: 1.从工具箱中"双击& ...

  4. 将一坨WinForm文件包装成一个exe

    什么 .net core 3.1 新特性,ILMerge,Costura.Fody 都试了一遍,真心都不好使. 还是 WinRAR 最实在~ 第一步选中 Release 或它的子文件夹,就是最终包含你 ...

  5. winform 文件拖拽drag\drop

    winform 重写函数,而不是控件委托事件 protected override void OnDragDrop(DragEventArgs drgevent) protected override ...

  6. DevExpress.XtraBars.Ribbon控件使用系列 (1)创建Ribbon窗体

    题外话,为什么每次输入内容的时候,编辑器直接输入汉字不可以呢,必须先输入一个非汉字字符才可以输入汉字,我使用的是搜狗输入法,难道是输入法的事? 最近在研究DevExpress的WinForm控件,先从 ...

  7. PST转换软件 v6.3

    简介: 通过Outlook Migrator可以无需安装Outlook即可将无限数量的Outlookpst转换为多种文件格式,并将带有附件的电子邮件导出为选定的文件格式,还可以将所有电子邮件从PST文 ...

  8. 如何将自己的代码自动添加版权信息[转]

    现在大多数公司都规定程序员在程序文件的头部加上版权信息,这样每个人写的文件都可以区分开来,如果某个文件出现问题就可以快速的找到文件的创建人,用最短的时间来解决问题,常常是以下格式: //======= ...

  9. react 数据可视化_使用d3创建数据可视化并在2020年做出React

    react 数据可视化 Data visualisation and application technologies have evolved greatly over the past decad ...

最新文章

  1. AJAXControlToolkit-Framework3.5SP1 下载地址
  2. ansible文档官网
  3. .NET 中关于 TypeCode 和枚举类型的问题
  4. mysql like 多个条件_MySQL高性能索引策略
  5. 指纹浏览器 开源 linux,浏览器指纹--Canvas指纹
  6. 数字锁相环的matlab仿真
  7. Silverlight实例教程 - Out of Browser的Debug和Notifications窗口
  8. Hive精华问答 | Hive的数据模型是怎样的?
  9. java 局部内部类常用么_Java中的内部类
  10. Asp.Net MVC 控制器
  11. 全网首发:JDK绘制文字:五、字体上下文产生流程
  12. Ubuntu 20.4 安装 Notepad++
  13. ESP8266WiFi模块资料整理
  14. 厉建宇的阿里巴巴离职信
  15. 边缘计算七大核心技术
  16. c语言指针什么时候加星号,c语言中指针前面的星号,什么时候可以省去,什么时候又必须带上呢?(转载)...
  17. zookeeper C API 完整运行实例
  18. 微软小娜 服务器连不上,windows10小娜连不上网络怎么办 win10小娜无法连接网络如何解决...
  19. Stm32 - Printf重定向(不)使用微库(Keil MDK)
  20. CentOS 7安装MySQL集群-GALERA CLUSTER 4 FOR MYSQL 8 RELEASE

热门文章

  1. Spark中如何管理Spark Streaming消费Kafka的偏移量
  2. lucene全文检索的概念
  3. selector选择器查询
  4. html5的canvas动画,Canvas HTML5简介 · Canvas动画教程
  5. mysql数据字典的通俗理解_MySQL关于数据字典的一个疑问
  6. opencv矩阵掩膜操作(提高图片对比度)
  7. #{}不自动改参数类型_我是干流动补胎的,想让我的柴油机气泵自动打气,怎么改装。谢谢。...
  8. pdf覆盖图片 Java_Java 添加、替换、删除PDF中的图片的示例代码
  9. java listview排序_android listviewadapter 怎么进行排序
  10. html边缘取消白边,Photoshop巧用边缘蒙版去除锐化后的白边