Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.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#_File Io - Fatal编程技术网

C# 比较不同文件夹中的文件

C# 比较不同文件夹中的文件,c#,file-io,C#,File Io,我正在尝试搜索路径1中的文件。如果该文件存在于path2中,它将在listView中列出 这是我的密码。它似乎不起作用 string path = @"C:\temp\code\path1"; string path2 = @"C:\temp\code\path2"; string fileType = "*.h"; DirectoryInfo d1 = new DirectoryInfo(path); DirectoryInfo d2 = new DirectoryInfo(path2);

我正在尝试搜索路径1中的文件。如果该文件存在于path2中,它将在listView中列出

这是我的密码。它似乎不起作用

string path = @"C:\temp\code\path1";
string path2 = @"C:\temp\code\path2";
string fileType = "*.h";

DirectoryInfo d1 = new DirectoryInfo(path);
DirectoryInfo d2 = new DirectoryInfo(path2);

foreach (FileInfo f1 in d1.GetFiles(fileType, SearchOption.AllDirectories))
{
    foreach (FileInfo f2 in d2.GetFiles(fileType, SearchOption.AllDirectories))
    {
        if (f1 == f2)
        {
            lstProjectFiles.Items.Add(f1.Name).SubItems.Add(path);
        }
        else 
        {
            MessageBox.Show("False");
        }
    }
}

当您比较
f1==f2
时,您正在比较
FileInfo
对象的引用,这些对象将不同。您需要比较文件及其子文件夹的名称(我正在删除文件夹名称的开头,以便只保留公共部分):


此比较基于文件名及其在文件夹结构中的位置。

当您比较
f1==f2
时,您正在比较不同的
FileInfo
对象的引用。您需要比较文件及其子文件夹的名称(我正在删除文件夹名称的开头,以便只保留公共部分):


此比较基于文件名及其在文件夹结构中的位置。

当您比较
f1==f2
时,您正在比较不同的
FileInfo
对象的引用。您需要比较文件及其子文件夹的名称(我正在删除文件夹名称的开头,以便只保留公共部分):


此比较基于文件名及其在文件夹结构中的位置。

当您比较
f1==f2
时,您正在比较不同的
FileInfo
对象的引用。您需要比较文件及其子文件夹的名称(我正在删除文件夹名称的开头,以便只保留公共部分):


此比较基于文件名及其在文件夹结构中的位置。

您应该只使用文件夹的name属性。FileInfo类中还有其他有用的信息,但这并不能确定这些文件是否包含相同的数据(不确定您是否正在尝试这样做)


您应该只使用的名称属性。FileInfo类中还有其他有用的信息,但这并不能确定这些文件是否包含相同的数据(不确定您是否正在尝试这样做)


您应该只使用的名称属性。FileInfo类中还有其他有用的信息,但这并不能确定这些文件是否包含相同的数据(不确定您是否正在尝试这样做)


您应该只使用的名称属性。FileInfo类中还有其他有用的信息,但这并不能确定这些文件是否包含相同的数据(不确定您是否正在尝试这样做)



具有相同名称的文件并不总是same@Anirudh是的,它们可能位于不同的子文件夹中,我会更正的。我说的是文件的内容您以前的代码是正确的。
Name
属性将只返回扩展名为的文件名。
FullName。无需使用
FullName。请替换
@Anirudh,但同名文件可能位于不同的文件夹中。同名文件不一定总是存在same@Anirudh是的,它们可能位于不同的子文件夹中,我会更正的。我说的是文件的内容您以前的代码是正确的。
Name
属性将只返回扩展名为的文件名。
FullName。无需使用
FullName。请替换
@Anirudh,但同名文件可能位于不同的文件夹中。同名文件不一定总是存在same@Anirudh是的,它们可能位于不同的子文件夹中,我会更正的。我说的是文件的内容您以前的代码是正确的。
Name
属性将只返回扩展名为的文件名。
FullName。无需使用
FullName。请替换
@Anirudh,但同名文件可能位于不同的文件夹中。同名文件不一定总是存在same@Anirudh是的,它们可能在不同的子文件夹中,我会更正。我说的是文件的内容您以前的代码是正确的。
Name
属性将只返回扩展名为的文件名。。不需要
FullName。替换
@Anirudh,但同名文件可能在不同的文件夹中。您如何比较这些文件!文件名、内容…具有相同名称的文件不会总是相同的。它们可能包含不同的数据!是的,我知道。在这种情况下,如果它们具有不同的数据,则path1中的文件将替换path2中的文件。如何比较这些文件!文件名、内容…具有相同名称的文件不会总是相同的。它们可能包含不同的数据!是的,我知道。在这种情况下,如果它们具有不同的数据,则path1中的文件将替换path2中的文件。如何比较这些文件!文件名、内容…具有相同名称的文件不会总是相同的。它们可能包含不同的数据!是的,我知道。在这种情况下,如果它们具有不同的数据,则path1中的文件将替换path2中的文件。如何比较这些文件!文件名、内容…具有相同名称的文件不会总是相同的。它们可能包含不同的数据!是的,我知道。在这种情况下,如果它们具有不同的数据,则path1中的文件将替换path2中的文件。
if (f1.FullName.Replace(path, "") == f2.FullName.Replace(path2, ""))
       string path = @"C:\temp\code\path1";
        string path2 = @"C:\temp\code\path2";
        string fileType = "*.h";


        DirectoryInfo d1 = new DirectoryInfo(path);
        DirectoryInfo d2 = new DirectoryInfo(path2);

        foreach (FileInfo f1 in d1.GetFiles(fileType, SearchOption.AllDirectories))
        {
            foreach (FileInfo f2 in d2.GetFiles(fileType, SearchOption.AllDirectories))
            {
                if (f1.Name == f2.Name)
                {
                    // you could also test the size before comparing actual data
                    if (f1.Length == f2.Length)
                    {
                        Console.WriteLine(string.Format("these files might be the same: {0}, {1}", f1.Name, f2.Name));
                    }
                    //lstProjectFiles.Items.Add(f1.Name).SubItems.Add(path);
                }
                else
                {
                    Console.WriteLine("False");
                }
            }
        }