我的一个小工具软件开发(4)—U盘小秘

阅读次数: 2,324

  • A+
所属分类:C#

 

 

        今天,完成了目录的查询、文件的比对工作。感觉这才是这个软件的灵魂所在。

通过用户设定的硬盘目录、U盘目录,首先将各自目录下的文件、文件夹进行遍历。

[infobox title="主要使用了Directory、DirectoryInfo类"]

[info]Directory.GetCurrentDirectory()获得当前运行程序的路径
DirectoryInfo对象.GetDirectories()获得该文件夹下的子目录,返回类型为DirectoryInfo
DirectoryInfo对象.GetFiles()获得该文件夹下的文件,返回类型为FileInfo
DirectoryInfo对象.Name获得文件夹名
DirectoryInfo对象.FullName获得文件夹完整的路径名
FileInfo对象.Name  和 FileInfo对象.FullName 同理
如何获取指定文件的基本信息;
FileInfo.Exists:获取指定文件是否存在;
FileInfo.Name,FileInfo.Extensioin:获取文件的名称和扩展名;
FileInfo.FullName:获取文件的全限定名称(完整路径);
FileInfo.Directory:获取文件所在目录,返回类型为DirectoryInfo;
FileInfo.DirectoryName:获取文件所在目录的路径(完整路径);
FileInfo.Length:获取文件的大小(字节数);
FileInfo.IsReadOnly:获取文件是否只读;
FileInfo.Attributes:获取或设置指定文件的属性,返回类型为FileAttributes枚举,可以是多个值的组合
FileInfo.CreationTime、FileInfo.LastAccessTime、FileInfo.LastWriteTime:分别用于获取文件的创建时间、访问时间、修改时间;[/info]

 

编写过程,非常顺利。目录的查询、文件的比对工作已完成。

 

有个问题是需要注意,文件夹的递归问题,示例如下:

//加载目录下所有文件
private void AddDirFiles(string dir)
{
  DirectoryInfo di = new DirectoryInfo(dir);

  FileInfo[] fis = di.GetFiles($"*.{txtFileType.Text.Trim()}");//文件类型
  foreach (FileInfo fi in fis)
  this.files.Add(fi.FullName);

  if (this.checkRecusive.Checked)//如果选择遍历所有文件
  {
   DirectoryInfo[] dis = di.GetDirectories();//目录下的子目录
   foreach (DirectoryInfo item in dis)
   this.AddDirFiles(item.FullName);
  }

}

[success]下一个问题,就是word文档的比对工作。[/success]

 

[info]

如果相同文件夹下文件个数不同,直接拷贝。

如果文件夹内的文件个数相同,那么就比对U盘、硬盘内同一个文件的最后修改日期,找到最新的文件,然后拷贝。

[/info]

 

逻辑关系清楚了,代码很快就能完成。

目录的查询、文件的比对函数已写完。

原来单线程,是卡住,假死状态,直到递归结束,文件同步完成。

开启线程后,遇到了新的问题:在线程内不能直接访问listView了。无奈,又要恶补新知识了------委托

今天更新到此,学习去了。。。


往期回顾:

  1. 我的一个小工具软件开发(1)—U盘小秘
  2. 我的一个小工具软件开发(2)—U盘小秘
  3. 我的一个小工具软件开发(3)—U盘小秘
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信公众号扫一扫
  • weinxin
ChemistrySir

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: