我是C#的新手,需要有关如何解决问题的建议:
我正在编写代码来同步文件夹。要确定两个文件是否是同一个文件,我需要比较它们的相对路径(来自其基本目录和文件名的子文件夹)。我用以下代码创建了一个FileInfo数组:
for (int y = 1; y <= nf; y++)
{
this.Title = "Folder Sync - Getting files from folder " + y;
DirectoryInfo basedir = new DirectoryInfo(dirs[y]);
dirf[y] = basedir.GetFiles("*", SearchOption.AllDirectories).OrderBy(item => item.FullName).ToArray();
}
但是,FileInfo类没有RelativePath属性。以下是我考虑的选项:
1.创建一个单独的字符串数组,其中每个文件的相对路径为file.FullName.Substring(basedir.FullName.Length)
我刚尝试了5,但遇到了错误“无法隐式转换FileInfo []到myFileInfo []”。在阅读了构造函数以试图解决这个问题后,我决定退后一步,询问这是否是正确的方法。
所以,一般问题:处理这个问题的最佳做法是什么? 具体问题:如何为每个文件包含RelativePath?
答案 0 :(得分:1)
我认为5与我认为的“标准方法”非常接近。
标准方法是为您的应用程序创建表示“文件”的类,并在其中添加信息。可能该类包含相对路径/绝对路径/基本路径,上次修改时间,哈希。避免直接使用FileInfo
将简化同步代码的单元测试。
在您使用FileInfo
作为事实来源时,您建议的其他方法2(按需计算)看起来很合理。
创建多个并行数组来表示单个对象列表通常是不好的做法 - 难以保持同步和测试。
答案 1 :(得分:1)
我想我只是用FileInfo成员和relativepath成员的字符串创建一个新对象。我不会试图从任何东西中推导出那个类,但它并没有给你带来任何好处,只会增加复杂性。