【问题标题】:Looking for guidance for vb.net program to cleanup temp file directories for every user寻找 vb.net 程序为每个用户清理临时文件目录的指导
【发布时间】:2016-04-24 22:03:50
【问题描述】:

我正在寻找一些指导,以使某个函数适用于我正在开发的程序。

我坚持的功能是从远程计算机上的多个目录中删除该计算机上所有用户配置文件的所有文件。

目前,在添加 file.delete() 之前,我正在尝试将目录和子目录中的所有文件输出到我的文本框。

所有“项目”都显示为一个字母字符,因为它将文件路径中的每个字母分隔成一个单独的项目(可能是我做For..Each 的方式)。

我知道我犯了多个新手错误,因为我是 VB.net 的新手,并且仍处于学习阶段,但我正在寻找一些指导。

我一直在搜索并将各个部分拼凑起来以使其正常工作,但遇到了困难,感谢任何帮助!

当前代码:

   Private Sub Deltemp_Click(sender As Object, e As EventArgs) Handles Deltemp.Click
    If Compname2.Text = "" Then
        MessageBox.Show("You didn't enter anything in the Computername field, please enter something then try again.")
        GoTo statementend
    End If
    Try
        If My.Computer.Network.Ping(Compname2.Text, 1000) Then
            PSoutput.Text = ""
        Else
            PSoutput.Text &= Compname2.Text + " is not connected to our network currently."
            GoTo statementend
        End If
        PSoutput.Text = ""
        Dim userpath As String = "\\" + Compname2.Text + "\c$\users\"
        Dim tempu(7) As String
        tempu(0) = "\AppData\Local\Temp\"
        tempu(1) = "\AppData\Local\Microsoft\Windows\Temporary Internet Files\"
        tempu(2) = "\AppData\Local\Microsoft\Credentials"
        tempu(3) = "\AppData\Local\Temporary Internet Files\"
        tempu(4) = "\AppData\Roaming\Microsoft\Credentials"
        tempu(5) = "\AppData\Roaming\SUN"
        tempu(6) = "\AppData\Local\Apps\2.0"
        Dim fsd As Object
        fsd = FileIO.FileSystem.GetDirectories(userpath)
        For Each user In fsd
            Try
                Dim filepaths = FileIO.SpecialDirectories.AllUsersApplicationData()
                If user Like "*Default*" Or user Like "*.NET*" Or user Like "*All Users" Or user Like "*Public" Then
                    PSoutput.Text &= ""
                Else
                    Dim Fullpath = user + tempu(7)
                    For Each item In Fullpath
                        FileIO.FileSystem.GetFiles(Fullpath)
                        PSoutput.Text &= item.ToString + " was found" & Environment.NewLine
                    Next
                End If
            Catch ex As Exception
                PSoutput.Text &= "A file was skipped for being in use or an exception occured" & Environment.NewLine
            End Try
        Next
    Catch
        MessageBox.Show("The machine/ip entered doesn't exist on our network or is an invalid entry")
    End Try
statementend:
    End Sub

【问题讨论】:

    标签: vb.net delete-file temp multiple-users


    【解决方案1】:

    就在这里:

    Dim Fullpath = user + tempu(7)
        For Each item In Fullpath '<<<<<<<<<
    

    Fullpath 似乎是一个字符串,因此当您执行For-Each 时,您将遍历该字符串中的字符。

    我认为您想要的是创建一个新的DirectoryInfo,获取该目录中的文件,然后遍历它们。

    dim directory = new System.io.DirectoryInfo(Fullpath)
    For Each file in directory.GetFiles()
    

    我建议在代码顶部添加“Option Strict”或为项目启用它。然后编译器会更“严格”地要求您声明类型,然后编译器会强制您更明确地说明您正在使用的类型。它会突出显示一些需要修复的错误,但这是值得的。

    【讨论】:

    • 我知道我想念的东西一定很简单,谢谢斯科特! - 如果可以的话,还有一个额外的问题,我注意到当我以这种方式运行它时,我只获取所有目录中的文件,当我点源目录时,我也没有看到获取目录,无论如何要获取里面的所有文件包括所有子目录?还要感谢您提供的“Option Strict”提示,我会实施的 :)
    • 不,你需要递归地获取每个目录中的目录并获取每个目录中的文件。因此,您将需要另一种方法 - 您将一个目录传递给它,然后它会获取该目录中的所有子目录并调用自己。这样它会一直遍历所有子目录,直到没有更多子目录为止。
    • 这里是an exampleone more
    • 太棒了,再次感谢 Scott 的所有帮助!
    猜你喜欢
    • 2020-05-07
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    相关资源
    最近更新 更多