2016-04-24 17 views
0

Ich bin auf der Suche nach einer Anleitung für eine funktionierende Funktion für ein Programm, ich arbeite an.Suchen Sie nach Anleitung für vb.net Programm zu bereinigen temporäre Datei Verzeichnisse für jeden Benutzer

Die Funktion, auf der ich feststecke, soll alle Dateien aus mehreren Verzeichnissen auf einem Remotecomputer für alle Benutzerprofile auf diesem Computer entfernen.

Momentan versuche ich, meine Textbox mit allen Dateien in den Verzeichnissen und Unterverzeichnissen auszugeben, bevor ich file.delete() hinzugefügt habe.

Alle "Elemente" werden als ein Buchstabe Zeichen angezeigt, da es jeden Buchstaben im Dateipfad in ein separates Element trennt (wahrscheinlich die Art, wie ich die For..Each gemacht habe).

Ich weiß, dass ich mehrere Anfängerfehler mache, da ich sehr neu bei VB.net bin und immer noch sehr viel in der Lernphase bin, aber ich suche nach einer Anleitung.

Ich habe Stücke gesucht und gezogen, um es zum Laufen zu bringen, aber ich habe eine Wand getroffen, jede Hilfe ist willkommen!

Aktuelle Code:

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 

Antwort

1

Es ist diese hier:

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

Fullpath erscheint eine Zeichenfolge zu sein, also, wenn Sie For-Each tun sind Sie in dieser Zeichenfolge durch die Zeichen laufen.

Ich denke, was Sie wollen, ist ein neues DirectoryInfo erstellen, holen Sie sich die Dateien in diesem Verzeichnis, und durchlaufen Sie sie.

Ich empfehle, 'Option Strict' an der Spitze des Codes hinzuzufügen oder für das Projekt zu aktivieren. Dann wird der Compiler "strikter" sein, wenn Sie Typen deklarieren müssen, und dann wird der Compiler Sie dazu zwingen, expliziter darüber zu sein, mit welchen Typen Sie arbeiten. Es wird einige Fehler zu beheben, aber es ist es wert.

+0

Ich wusste, dass es etwas sein musste, das ich vermisste, danke Scott !! - Zusätzliche Frage, wenn Sie könnten, merke ich, dass, wenn ich es auf diese Weise ich nur die Dateien in allen Verzeichnissen, ich habe auch keine get-Verzeichnisse, wenn ich Sourcedirectories, um alle Dateien im Inneren zu bekommen alle Unterverzeichnisse enthalten? Auch danke für den 'Option Strict' Tipp, ich werde das implementieren :) –

+1

Nein, Sie müssten rekursiv die Verzeichnisse in jedem Verzeichnis holen und die Dateien in jedem Verzeichnis holen. Sie werden also eine weitere Methode brauchen - Sie übergeben ihr ein Verzeichnis, dann werden alle Unterverzeichnisse in diesem Verzeichnis abgerufen und sie ruft sich selbst auf. Auf diese Weise geht es durch alle Unterverzeichnisse, bis es keine mehr gibt. –

+1

Hier ist [ein Beispiel] (https://support.microsoft.com/en-us/kb/306666) und [noch eins] (http://www.coderslexicon.com/playing-with-recursive-directory-diving) -in-vb-net /). –