Перечисление всех файлов в корневом каталоге - PullRequest
0 голосов
/ 05 июля 2019

Спасибо за вашу поддержку! Теперь у меня есть рабочий код для сканирования всех папок, подпапок и файлов. Осталась решить только одну проблему:

Я не получаю файлы в исходном корневом каталоге, только подпапки. Мне также нужно вызвать FileInfo для этих файлов.

Как это можно решить, не внося слишком много изменений в код?

private void ScanFolder(String prefix, String path)
{
    try
    {
        string user = System.IO.File.GetAccessControl(path).GetOwner(typeof(System.Security.Principal.NTAccount)).ToString();
        DirectoryInfo di = new DirectoryInfo(path);

        foreach (var dir in new DirectoryInfo(path).GetDirectories("*", SearchOption.TopDirectoryOnly))
        {
            listBox1.Invoke((MethodInvoker)delegate { listBox1.Items.Add(prefix + dir.Name + " (" + dir.Name.Length.ToString() + ")   "); });

            foreach (FileInfo fileInfo in dir.GetFiles())
            {
                listBox1.Invoke((MethodInvoker)delegate { listBox1.Items.Add(prefix + fileInfo.Name + " (" + fileInfo.Name.Length.ToString() + ")   " + user + "   " + fileInfo.FullName + " (" + fileInfo.FullName.Length.ToString() + ")"); });
            }

            ScanFolder(prefix + "—", dir.FullName);
        }
    }
    catch
    {
        if (!this.IsDisposed)
        {
            listBox1.Invoke((MethodInvoker)delegate { listBox1.Items.Add("Access Denied to : " + path); });
        }
    }
}

Выход:

** Файлы должны быть здесь **
13-9-legacy_vista_win7_64_dd_ccc_whql (37)
Radeon-Software-Adrenalin-18.3.3-MinimalSetup-180319_web (56)
Бин (3)
—— локализация (12)
——— cs (2)
——— da_DK (5)
——— de (2)
——— el_GR (5)
——— es_ES (5)

1 Ответ

2 голосов
/ 05 июля 2019

Пока вы ищете только каталоги в корневом каталоге.
Вы также хотите перечислить файлы:

private void ScanFolder(String prefix, String path)
{
    try
    {
        string user = System.IO.File.GetAccessControl(path).GetOwner(typeof(System.Security.Principal.NTAccount)).ToString();
        DirectoryInfo di = new DirectoryInfo(path);

        // Enumerate through the files here
        foreach (FileInfo fileInfo in di.GetFiles())
        {
            listBox1.Invoke((MethodInvoker)delegate { listBox1.Items.Add(prefix + fileInfo.Name + " (" + fileInfo.Name.Length.ToString() + ")   " + user + "   " + fileInfo.FullName + " (" + fileInfo.FullName.Length.ToString() + ")"); });
        }
        // ----

        // You can also use the DirectoryInfo you created earlier here
        foreach (var dir in new di.GetDirectories("*", SearchOption.TopDirectoryOnly))
        {
            listBox1.Invoke((MethodInvoker)delegate { listBox1.Items.Add(prefix + dir.Name + " (" + dir.Name.Length.ToString() + ")   "); });

            foreach (FileInfo fileInfo in dir.GetFiles())
            {
                listBox1.Invoke((MethodInvoker)delegate { listBox1.Items.Add(prefix + fileInfo.Name + " (" + fileInfo.Name.Length.ToString() + ")   " + user + "   " + fileInfo.FullName + " (" + fileInfo.FullName.Length.ToString() + ")"); });
            }

            ScanFolder(prefix + "—", dir.FullName);
        }
    }
    catch
    {
        if (!this.IsDisposed)
        {
            listBox1.Invoke((MethodInvoker)delegate { listBox1.Items.Add("Access Denied to : " + path); });
        }
    }
}
...