Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用文件数组包含相对路径的最佳方法_C#_Arrays_Class_Properties - Fatal编程技术网

C# 使用文件数组包含相对路径的最佳方法

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

我是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.Substringbasedir.FullName.Length

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

那么,一般问题是:处理这个问题的最佳实践方式是什么?
具体问题:如何为每个文件包含RelativePath 标准方法是为应用程序创建表示文件的类,并在其中添加信息。该类可能包含相对路径/绝对路径/基本路径、上次修改时间、散列。避免直接使用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是转换集合的一种简单方法,但实际上取决于您的知识/目标/风格。您是否通过网络同步?或者这两个文件夹是否位于同一驱动器/机器上?