Visual Basic 2010 Express, benötige hilfe bei meinem Code.

  • VB.NET

Es gibt 45 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    CJ2401 schrieb:

    Hoffe das dass so richtig ist
    Den Kontext hast Du nicht verstanden.
    Wenn Du aus

    VB.NET-Quellcode

    1. Dim txt = "MeinSpiel"
    ==>

    VB.NET-Quellcode

    1. Dim txt = MeinSpiel
    machst, hast Du einen Zugriff auf die nicht existierende String-Variable MeinSpiel programmiert, kein Wunder, dass das dem Compiler nicht gefällt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo und vielen vielen Dank für deine super Antwort :)

    Es funktioniert fast, er erstellt nun den minecraftbackup order.

    Dann beginnt er die Dateien aus dem .minecraft ordner rüber zu schauffeln. Doch bekommt er nicht alle unterverzeichnisse mit. Dazu kommt dann noch das er die Dateien die von Minecraft seitens keine endung haben gar nicht anrührt und die ganze Mods auch liegen gelassen werden. Woran liegt das nun? Möchte ja das ganze Verzeichniss mit nehmen. Kannst du mir da auch helfen?

    Gruß

    CJ2401
    Naja, der Move-Befehl betrifft alle Dateien in deinem Ordner...
    Aber nicht die Unterordner und deren Dateien oder gar die Dateien der Unterordner, der Unterordner... usw ;)

    Das was du möchtest wäre im Grunde das:

    Achtung: Kleiner Edit!!!!!

    VB.NET-Quellcode

    1. Dim di As New System.IO.DirectoryInfo("C:\Test\")
    2. Dim di2 As New System.IO.DirectoryInfo("C:\Test2\")
    3. If di2.Exists Then di2.Delete(True)
    4. di.MoveTo(di2.FullName)


    Wenn du verstehst was du oben gemacht hast, solltest du den Code so abändern können, dass er funktioniert ;)
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    ich würde erstmal den ganzen Müll ausmisten.

    Für deine Dateisystem-zugriffe benötigst du genau 2 Klassen, mehr nicht: DirectoryInfo und FileInfo.

    Schmeiß alle Zugriffe per Microsoft.VisualBasic.FileIO, System.IO.Directory, System.IO.File und My.Computer.FileSystem raus, und bau das mal auf eine einheitliche Basis um.

    Exists, GetFiles, Copy, Move, Name, Fullname - alles, was du brauchst ist in diesen beiden Klassen sinnvoll und strukturiert zusammengefasst: DirectoryInfo und FileInfo.
    Drum nimm auch die, und nix anneres, was du nicht brauchst.
    nicht zu vergessen Create aus der Klasse DirectoryInfo, falls mal ein Verzeichnis nicht da ist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wobei zu beachten ist...
    MoveTo VERSCHIEBT!!! danach ist es im Ausgangsordner weg...

    Wenn du ne Kopie willst (was beim Backup wohl sinnvoller ist)...
    wäre die simpelste Variante:

    VB.NET-Quellcode

    1. Dim di As New System.IO.DirectoryInfo("C:\Test2\")
    2. If di.Exists Then di.Delete(True)
    3. My.Computer.FileSystem.CopyDirectory("C:\Test\", di.FullName)


    Ich frag mich gerade wieso DirectoryInfo keine Copy-Funktion hat oO
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Hallo und nochmals Danke für die Antworten :)

    Ich versuche grade das so auf zu bauen wie MemoAnMichSelbst es mir versucht hat zu schildern.

    An ErfinderDesRades, wenn ich nun den ganzen Code um bastel, was kein Problem ist. Wäre es dann immer noch mit den von dir genannten befehlen ins Appdataverzeichnis auf jedem rechner zu kommen? den ich habe ja bisher immer das problem gehabt das es nicht ging, was ja erst du enviroment und co. möglich wurde. Nicht das du denkst ich will nur auf meinem PC eine Datei mit unterordnern von A nach B schicken. Aber trotzdem danke für deine Antwort ;)

    Gruß
    CJ2401

    MemoAnMichSelbst schrieb:

    Ich frag mich gerade wieso DirectoryInfo keine Copy-Funktion hat
    Offensichtlich sollst Du Files kopieren, um wenigstens zwischendurch eine Progressbar bedienen oder abbrechen zu können.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Mag an gewissen Stellen sinnvoll sein, aber ich hätte trotzdem gedacht, dass es hier ne Copy-Funktion gibt.
    Zumal es eine MoveTo-Funktion gibt...

    Wenn es mit einer einzigen Funktion läuft, wie im obigen Post, dann ist schon klar, dass man den Fortschritt nicht darstellen kann. ^^
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Was meinst du mit "Wieso macht ihr das"?

    Also, wenn du nen Kopiervorgang anzeigen willst... Als Fortschrittsbalken usw. dann musst du wirklich händisch!!!! zusammenprogrammieren, dass er die Ordner rekursiv durch geht und Ordner für Ordner für Unterordner für Unterordner erstellt und Datei für Datei kopiert.

    Da ist so nen Dreizeiler, welcher einfach einen Kompletten Ordner samt Inhalt und Unterordner usw. wo anders hin kopiert, wie:

    VB.NET-Quellcode

    1. Dim di As New System.IO.DirectoryInfo("C:\Test2\")
    2. If di.Exists Then di.Delete(True)
    3. My.Computer.FileSystem.CopyDirectory("C:\Test\", di.FullName)

    nicht mehr möglich.

    Prinzipiell kannst du aber ne Form über mehrere Wege aufrufen...
    Unschön wären die VB-Varianten

    VB.NET-Quellcode

    1. form2.show(me)

    oder

    VB.NET-Quellcode

    1. form2.showdialog(me)


    Sauber wäre:

    VB.NET-Quellcode

    1. Private frm As Form2
    2. 'in deinem Button.Click dann:
    3. If (frm Is Nothing OrElse frm.IsDisposed) Then
    4. frm = New form2
    5. End If
    6. frm.Show()
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    MemoAnMichSelbst schrieb:

    Sauber wäre:
    Fast. :D
    Gugst Du hier.
    Das Fenster nur dann mit .Show() aufrufen, wenn es unsichtbar ist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Schande über mein Haupt XD
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Das klingt kompliziert :D

    Ich werde erstmal das problem mit dem ordner und unterordner ausbasteln und dann schaun ob ich weiter gehe :)


    Danke das ihr mir so geholfen habt :)
    Ich steh wieder auf dem Schlauch :/

    ich bekomm es nicht hin das er alle Datein aus dem .minecraft ordner zieht. Hab nochmal nachgedacht und ja ich möchte sie verschieben nicht kopieren.
    Das mit dem Ordner erstellen Funktioniert ja nun. Aber wie bekomm ich es hin das er auch alle Dateien mit allen Ordner und Unterordnern und Unterdateien mit nimmst, der .minecraft ordner soll also 1/1 nach MinecraftBackup verschoben werden. Kann mir da jemand nochmal bitte Helfen?

    Gruß
    CJ2401

    CJ2401 schrieb:

    Kann mir da jemand nochmal bitte Helfen?
    Es steht doch alles da.
    Poste also mal Deinen Code und beschreib genau, was nicht funktioniert.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. If System.IO.Directory.Exists(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "minecraftbackup")) = False Then
    4. System.IO.Directory.CreateDirectory(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "minecraftbackup"))
    5. End If
    6. Dim fileList = My.Computer.FileSystem.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\.minecraft",
    7. Microsoft.VisualBasic.FileIO.SearchOption.SearchAllSubDirectories, "*.*")
    8. For Each foundFile In fileList
    9. Dim fi As New System.IO.FileInfo(foundFile)
    10. fi.MoveTo(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "minecraftbackup", fi.Name))
    11. Next
    12. End Sub
    13. End Class


    Ich wollte ja eigenentlich die Idee von Memo annehmen, aber das haut nicht hin.

    So sieht er jetzt aus. Er erstellt den Backup ordner und beginn mit dem Verschieben einzelner Datein. Dann bricht er ab und sagt mal wieder er kann keine Doppelten Datei erstellen. Dabei ist da keine.
    Dann fehlt halt noch das er alle Datei + alle Verzeichnisse verschieben soll, auch die ganzen unterverzeichnisse.

    Hoffe das du es so verstehst
    Falls Du nicht hast: Gib Deinem Programm Option Strict On.
    Erstelle die Namen der Verzeichnisse nur ein Mal, verwende DirectoryInfo-Variablen dafür.
    Und wenn er wieder abbricht mit doppelten Dateien, sieh Dir an, um welche Datei es sich handelt (Klick drauf, Shift+F9).
    Überzeuge Dich davon, dass sie tatsächlich nur einmal oder gar 2x existiert.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Es wird ja nur ein verzeichniss erstellt, das minecraftbackup verzeichniss. Bevor ich den Code starte gibt es den ordner ja gar nicht. Deswegen verstehe ich auch nicht wieso es doppelte datein sein sollen.
    Wenn ich so über die doppelten Datein nachdenke, weiß ich sogar welche das sein könnten. Wenn ich beim Launcher auf Installieren gehe, legt er ein Backup vom bin Ordner an. Das geht weil sich die Datei nahmen und Anzahlen nie ändern, nur ihr inhalt. Das konnte ich also schon schreiben. Problem beim Verschieben ist das er nur die Dateien mit nimmt, nicht aber die Ordner. Das ist das derzeitige Problem. Wie kann ich das Ausbügeln? Weißt du das?

    Was meinst du mit: Gib Deinem Programm Option Strict On.

    Gruß
    CJ2401

    CJ2401 schrieb:

    Wie kann ich das Ausbügeln? Weißt du das?
    Debuggen.
    Laufendes Programm unterbrechen, den Inhalt von Variablen ansehen, das Programm Schritt für Schritt verfolgen, Dich überzeugen, dass es genau so läuft, wie Du denkst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!