- A+
今天,完成了目录的查询、文件的比对工作。感觉这才是这个软件的灵魂所在。
通过用户设定的硬盘目录、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了。无奈,又要恶补新知识了------委托
今天更新到此,学习去了。。。
往期回顾:
- 我的微信
- 微信扫一扫
-
- 我的微信公众号
- 微信公众号扫一扫
-