JohnnyBeGood Ответов: 1

Папка вообще не будет доступна с классом directoryinfo в c#.


Когда я заглядываю в папку, C:\Windows\System32\WindowsPowerShell\v1.0\Modules\AppBackgroundTask, ListViewbox не имеет файлов и сообщение об ошибке " не удалось найти часть пути 'C:\Windows\System32\WindowsPowerShell\v1.0\Modules\AppBackgroundTask"." Папка существует. Как мы можем получить файлы в папке?

private void cmdList_Click(object sender, EventArgs e)
       {

       //' ********************
       //'THIS SECTION IS NOT REQUIRED TO LIST FILES, IT JUST PREPARES THE LISTVIEW.
       lvwFiles.View = View.Details; //'SET REPORT STYLE

       lvwFiles.Items.Clear(); //'CLEAR ALL FROM PREVIOUS TIME
       lvwFiles.Columns.Clear();

       lvwFiles.Columns.Add("Filename", 100, HorizontalAlignment.Left) ;//'CREATE COLOUMS AT RUN TIME
       lvwFiles.Columns.Add("Extension", 45, HorizontalAlignment.Center);
       lvwFiles.Columns.Add("Size (KB)", 50, HorizontalAlignment.Center);
       lvwFiles.Columns.Add("Create Time", 120, HorizontalAlignment.Center);
       //' *********************

       //Dim dFolder As DirectoryInfo = New DirectoryInfo(txtFolder.Text)
       //Dim fFileArray() As FileInfo = dFolder.GetFiles
           DirectoryInfo dFolder = new DirectoryInfo (txtFolder.Text);
           try
           {
                FileInfo[] fFileArray = dFolder.GetFiles();
                //string[] FileInfo = dFolder .GetFiles ();
                //string[] fFileArray;
                //FileInfo = As FileInfo = dFolder.GetFiles
                //' 'FILEARRAY' NOW HOLDS ALL THE FILES IN THE SELECTED FOLDER
                FileInfo fFile;
                ListViewItem lCurrent;

                //Dim fFile As FileInfo
                //Dim lCurrent As ListViewItem

                // ' LOOP THROUGH ARRAY, LISTING ALL FILES IN LISTVIEW
                //For Each fFile In fFileArray
                //    lCurrent = lvwFiles.Items.Add(fFile.Name)
                //    lCurrent.SubItems.Add(fFile.Extension)
                //    lCurrent.SubItems.Add(fFile.Length \ 1024 + 1) //'CONVERT BYTES TO KB
                //    lCurrent.SubItems.Add(fFile.CreationTime)
                //Next

                foreach (FileInfo f in fFileArray)
                {
                    lCurrent = lvwFiles.Items.Add(f.Name);
                    lCurrent.SubItems.Add(f.Extension);
                    lCurrent.SubItems.Add((f.Length / 1024 + 1).ToString()); //'CONVERT BYTES TO KB
                    lCurrent.SubItems.Add(f.CreationTime.ToString());
                }
           }
           catch(Exception ex)
           {
               Console.WriteLine(ex.Message);
          }


Что я уже пробовал:

Моя учетная запись является одной из привилегий администратора. Когда моя учетная запись использует dir /a:d перед запуском dir, папка не может быть показана, но после запуска dir / a:d папка отображается в пути.

1 Ответов

Рейтинг:
0

Dave Kreskowiak

Путь к папке-это хороший путь. Проблема в том, что эта папка, наряду с 16 другими в папке модулей, имеет системный атрибут, установленный на них. Это делает их немного ... безопасный... против проверок безопасности методов GetDirectories и GetFiles класса DirectoryInfo.

Вы можете взглянуть на исходный код класса DirectoryInfo, здесь[^], но это нелегкое чтение и, вероятно, мало что вам скажет, кроме того, что есть куча проверок безопасности, выполненных против пути, который вы указали при создании экземпляра класса DirectoryInfo.

Похоже, что код каким-то образом не проходит проверку безопасности, даже при запуске кода от имени администратора.

У меня сейчас нет времени копаться в нем самому.