Путь не имеет допустимой формы - ошибка SystemArgumentException - PullRequest
0 голосов
/ 03 мая 2020

Я создаю приложение (антивирус), которое ищет файлы в разных папках компьютера. Он содержит базу данных хэшей MD5 (вирусных хэшей), которая используется для сравнения их с имеющимися на компьютере. Я использую фоновый работник для выполнения задачи (процесс сканирования), однако, похоже, что мое программное обеспечение не получает (скорее всего) доступ к различным папкам, таким как папка Windows folder / system32 и т. Д. c. Я системный администратор, я пытался запустить его таким образом, также я изменил манифест приложения с «invoker» на «requireAdministrator», но безуспешно. Другие папки (например, рабочий стол и т. Д. c) работают нормально с кодом ниже:

Код для BackgroundWorker_DoWork:

  Dim worker As System.ComponentModel.BackgroundWorker = CType(sender, System.ComponentModel.BackgroundWorker)
    Dim folder As String = "" & TextBox1.Text & ""
    Try
        For Each file As String In My.Computer.FileSystem.GetFiles(folder, FileIO.SearchOption.SearchAllSubDirectories)
            Try
                Dim scanbox As New TextBox
                Dim read As String = My.Computer.FileSystem.ReadAllText(System.AppDomain.CurrentDomain.BaseDirectory & "viruslist.txt")
                scanbox.Text = read.ToString
                Dim md5 As MD5CryptoServiceProvider = New MD5CryptoServiceProvider
                Dim f As FileStream = New FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
                f = New FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
                md5.ComputeHash(f)
                Dim hash As Byte() = md5.Hash
                Dim buff As StringBuilder = New StringBuilder
                Dim hashByte As Byte
                For Each hashByte In hash
                    buff.Append(String.Format("{0:X2}", hashByte))
                Next

                If scanbox.Text.Contains(buff.ToString) Then
                    AddListItem(ListBox1, "" & file & " - Virus")
                    AddListItem2(ListBox2, "" & file & "")
                End If
            Catch ex As Exception
            End Try
            SetLabelText_ThreadSafe(Me.Label1, "" & file & "")
            If (BackgroundWorker1.CancellationPending = True) Then

                e.Cancel = True
                Exit For
            End If
            SetLabelText_ThreadSafe(Me.Label1, "Scanning: " & file & "")
            int = int + 1
            SetLabelText_ThreadSafe(Me.Label2, "Number Of Files Scanned: " & int & " Out Of " & filecount & "")
            Dim pct As Integer = CInt(int / filecount * 100)
            BackgroundWorker1.ReportProgress(pct)
        Next file
    Catch ex As UnauthorizedAccessException
    End Try

Я получаю сообщение об ошибке:

 For Each file As String In My.Computer.FileSystem.GetFiles(folder, FileIO.SearchOption.SearchAllSubDirectories)

При отладке ошибка выглядит следующим образом:

Возникло исключение: 'System.ArgumentException' в mscorlib.dll Исключение типа 'System.ArgumentException' произошло в mscorlib.dll, но не было обработано в код пользователя Путь не имеет допустимой формы.

Я использую список, чтобы сначала вывести список файлов, ожидающих сканирования программным обеспечением, и список работает нормально, даже для папки Windows. Проблема в том, что он не проверяет их, что приводит к ошибке «SystemArgumentException».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...