我在 vb.net 中使用多个 for 循环堆叠时遇到问题

问题描述 投票:0回答:1

所以我尝试了各种方法。我将首先发布我所拥有的内容,然后再查看我尝试过的其他内容。我知道我的后勤工作在某种程度上搞砸了,但在尝试了 10 种不同的事情之后,我不知所措。这就是我目前所拥有的:

Public Shared Function secureDelete(ByVal dir As String, ByVal toWrite As Integer, ByVal delType As SearchOption) As List(Of String)
currentNum = 0
totalFiles = Directory.GetFiles(dir).Length
Try
    For Each f As String In Directory.GetFiles(dir, "*.*", delType)
        If File.Exists(f) Then
            File.SetAttributes(f, FileAttributes.Normal)
            Dim sectors As Double = Math.Ceiling(New FileInfo(f).Length / 512)
            Dim b = New Byte(511) {}
            Dim rng As RandomNumberGenerator = RandomNumberGenerator.Create()
            Dim inputStream As New FileStream(f, FileMode.Open)
            For currentPass As Integer = 0 To toWrite - 1 Step 1
                'If currentPass < toWrite Then
                Debug.WriteLine("C1: " & currentPass & " - T1: " & toWrite)
                    inputStream.Position = 0
                    For sectorsWritten As Integer = 0 To sectors - 1 Step 1
                    'If sectorsWritten < sectors Then
                    Debug.WriteLine("C: " & sectorsWritten & " - T: " & sectors)
                            rng.GetBytes(b)
                            Debug.WriteLine(b.ToString())
                            inputStream.Write(b, 0, b.Length)
                    'End If
                Next
                'End If

            Next
            inputStream.SetLength(0)
            inputStream.Close()
            rng.Dispose()
            Dim dt As New DateTime(2099, 1, 1, 0, 0, 0)
            File.SetCreationTime(f, dt)
            File.SetLastAccessTime(f, dt)
            File.SetLastWriteTime(f, dt)
            File.SetCreationTimeUtc(f, dt)
            File.SetLastAccessTimeUtc(f, dt)
            File.SetLastWriteTimeUtc(f, dt)
            File.Delete(f)
            fileList.Add("OK: " & f)
            Debug.WriteLine(f)
            currentProg = updateProgress(currentNum + 1)



        End If


    Next
    Return fileList
    currentProg = 0

Catch ex As Exception
    Debug.WriteLine(ex.ToString())
    fileList.Add("ERROR: " & ex.ToString)
    Return fileList
    currentProg = 0
End Try
End Function

以下是您将在此代码段中看到引用的属性:

Private Shared Property totalFiles As Integer = 0
Private Shared Property currentNum As Integer = 0
Public Shared Property currentProg As Integer = 0
Public Shared Property fileList As List(Of String)

该函数的要点是生成垃圾数据并用该垃圾数据单独覆盖所有文件,然后删除该文件。您可以看到我在哪里注释了一些 If 语句。一开始我觉得这些是必要的,但看了一会儿又觉得多余,所以就去掉了。结果相同。然后我意识到我的字节数组声明错误(Dim b As Byte(511),或者至少,也许?),所以我改变了它。结果相同。看来我的代码陷入了 For 循环中。我不知道为什么。显然,这与计数方式有关,但我也尝试过:If 语句上不等于,For 语句上没有 Step,加上等于而不是 - 1,可能还有其他一些东西。我一整天都在尝试这样做。我完全迷路了。它必须与 For 循环有关,对吧?我大概有 10 年没有写过任何代码了,所以我已经非常生疏了,并试图重新开始。任何见解将不胜感激。顺便说一下,这是我遇到的错误:

arrays vb.net for-loop filesystems file-manipulation
1个回答
0
投票

您的

fileList
声明中缺少“新”条款,请尝试:

Public Shared Property fileList As New List(Of String)

引用类型需要初始化。您可以在声明中或启动代码中执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.