C # mappe, undermappe og filer, der ikke kommer op i C # Windows programkatalog sti sammenligning kode

Indlæg af Hanne Mølgaard Plasc

Problem



For denne kode ønskede jeg, at brugeren i det væsentlige skulle indtaste to katalogveje og sammenligne dem, hvis der er forskelle i mapper eller filer, helt ned til den specifikke mappe eller fil i et C # Windows-program. Koden, jeg har nu, går kun til den umiddelbare mappe, og kun listen over de umiddelbare filer, hvis de er inde i den umiddelbare mappe.


private void btnCompare\_Click(object sender, EventArgs e)
{
    // Clear previous results.
    dgvFiles.Rows.Clear();

    // Get sorted lists of files in the directories.
    string dir1 = txtDir1.Text;
    if (!dir1.EndsWith("\")) dir1 += "\";
    string[] file\_names1 = Directory.GetFileSystemEntries(dir1);
    for (int i = 0; i < file\_names1.Length; i++)
    {
        file\_names1[i] = file\_names1[i].Replace(dir1, "*.*");

    }
    Array.Sort(file\_names1);

    string dir2 = txtDir2.Text;
    if (!dir2.EndsWith("\")) dir2 += "\";
    string[] file\_names2 = Directory.GetFileSystemEntries(dir2);
    for (int i = 0; i < file\_names2.Length; i++)
    {
        file\_names2[i] = file\_names2[i].Replace(dir2, "*.*");
    }
    Array.Sort(file\_names2);

    // Compare.
    int i1 = 0, i2 = 0;
    while ((i1 < file\_names1.Length) && (i2 < file\_names2.Length))
    {
        if (file\_names1[i1] == file\_names2[i2])
        {
            // They match. Display them both.
            dgvFiles.Rows.Add(new Object[] { file\_names1[i1], file\_names2[i2] });
            i1++;
            i2++;
        }
        else if (file\_names1[i1].CompareTo(file\_names2[i2]) < 0)
        {
            // Display the directory 1 file.
            dgvFiles.Rows.Add(new Object[] { file\_names1[i1], null });
            i1++;
        }
        else
        {
            // Display the directory 2 file.
            dgvFiles.Rows.Add(new Object[] { null, file\_names2[i2] });
            i2++;
        }
    }


Enhver hjælp ville blive værdsat. Mange tak!

Bedste reference


Du kan bruge overbelastningen af ​​GetFileSystemEntries, der tager en yderligere SearchPattern streng og en SearchOption som parametre. Dette får dig også undermapper, herunder filerne: [5]


string[] file\_names1 = Directory.GetFileSystemEntries(dir1, "*",
                       SearchOption.AllDirectories);