包含文件数组的相对路径的最佳方法

时间:2015-05-29 15:54:31

标签: c# arrays class properties

我是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)

  1. 每次需要时计算相对路径。
  2. 将FileInfo对象和RelativePath字符串放在Object数组
  3. 扩展FileInfo属性(显然当前C#不可用)
  4. 使用相对路径字段/属性创建派生类myFile info。在创建myFileInfo数组时,使用Relative路径填充它。
  5. 我刚尝试了5,但遇到了错误“无法隐式转换FileInfo []到myFileInfo []”。在阅读了构造函数以试图解决这个问题后,我决定退后一步,询问这是否是正确的方法。

    所以,一般问题:处理这个问题的最佳做法是什么? 具体问题:如何为每个文件包含RelativePath?

2 个答案:

答案 0 :(得分:1)

我认为5与我认为的“标准方法”非常接近。

标准方法是为您的应用程序创建表示“文件”的类,并在其中添加信息。可能该类包含相对路径/绝对路径/基本路径,上次修改时间,哈希。避免直接使用FileInfo将简化同步代码的单元测试。

在您使用FileInfo作为事实来源时,您建议的其他方法2(按需计算)看起来很合理。

创建多个并行数组来表示单个对象列表通常是不好的做法 - 难以保持同步和测试。

答案 1 :(得分:1)

我想我只是用FileInfo成员和relativepath成员的字符串创建一个新对象。我不会试图从任何东西中推导出那个类,但它并没有给你带来任何好处,只会增加复杂性。