C# 使用文件数组包含相对路径的最佳方法
我是C新手,需要关于如何处理问题的建议: 我正在编写同步文件夹的代码。要确定两个文件是否相同,我需要比较它们的基本目录和文件名中的相对路径子文件夹。我使用以下代码创建了一个FileInfo数组:C# 使用文件数组包含相对路径的最佳方法,c#,arrays,class,properties,C#,Arrays,Class,Properties,我是C新手,需要关于如何处理问题的建议: 我正在编写同步文件夹的代码。要确定两个文件是否相同,我需要比较它们的基本目录和文件名中的相对路径子文件夹。我使用以下代码创建了一个FileInfo数组: for (int y = 1; y <= nf; y++) { this.Title = "Folder Sync - Getting files from folder " + y; DirectoryInf
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.Substringbasedir.FullName.Length
每次需要时,计算相对路径。
将FileInfo对象和RelativePath字符串放在对象数组中
扩展FileInfo属性显然不适用于当前的C
使用相对路径字段/属性创建派生类myFile info。在创建myFileInfo数组时,用相对路径填充该字段。
我刚刚尝试了5,但遇到了一个错误,无法将FileInfo[]隐式转换为myFileInfo[]。在阅读了试图解决这个问题的构造函数之后,我决定退一步,问问这是否是正确的方法
那么,一般问题是:处理这个问题的最佳实践方式是什么?
具体问题:如何为每个文件包含RelativePath我认为5与我所考虑的标准方法非常接近。 标准方法是为应用程序创建表示文件的类,并在其中添加信息。该类可能包含相对路径/绝对路径/基本路径、上次修改时间、散列。避免直接使用FileInfo将简化同步代码的单元测试 在您建议的其他方法中,2 compute on demand看起来是合理的,因为您使用FileInfo作为真相的来源
创建多个并行数组来表示单个对象列表通常是不好的做法-很难保持同步和测试。我想我应该创建一个新对象,其中包含一个FileInfo成员和一个relativepath成员字符串。不过,我不会试图从任何东西中派生该类,它实际上并没有给您带来任何好处,只是增加了复杂性。这是一个有趣的想法。我没有想到使用具有FileInfo成员的类而不是派生类。这意味着,如果我有一个对象myFileInfo file1,我会得到file1.FileInfo.length的长度,而不是file1.length,对吗?这样做有什么好处?另外,我如何使用GetFiles方法填充myFileInfo数组?好处是它非常简单,组合几乎总是比继承更好/更简单。要创建列表,只需使用linq select,并在select语句中创建一个新对象。谢谢。我正在尝试这个方法。谢谢你的信息!很高兴知道这是标准方法。你是说我应该让它成为一个新的基类而不是派生类?我将如何使用GetFiles方法填充myFileInfo数组?@KalevMaricq我同意grrrrrr的回答-根据您的描述,从任何类中都没有特别的好处。可枚举。选择LINQ是转换集合的一种简单方法,但实际上取决于您的知识/目标/风格。您是否通过网络同步?或者这两个文件夹是否位于同一驱动器/机器上?