tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Zvoni
  • 1 Beitrag von Shogoki92
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
443
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Lesterdor Lesterdor ist offline Mitglied Gold
    Registriert seit
    Sep 2008
    Beiträge
    101
    Hallo liebe Community,

    [1.] Vorwort:
    Wie ihr sicherlich sehen könnt, bin ich neu hier im Forum. Dies trifft ebenfalls auf meine Kenntnisse in Visual Basic 2008 zu. Es ist meine erste Programmiersprache, ich bin also völlig neu auf dem Gebiet der Programmierung. Ich habe mich durch die VB 2008 Hilfe gelesen und einige Erfahrungen sammeln können. Einige kennen mich vielleicht aus dem Thread "Hilfe bei meinem ersten Projekt", dort habe ich einfach versucht einige Funktionen zu schreiben, was quasi am Ende ein Programm darstellen sollte, um Erfahrungen auf dem Gebiet zu erhalten.

    [2.] "Mein zweites Projekt - Projektname "Call of Duty 4 Profiler"":
    Dieses Mal soll mein Programm wirklich Einsatz bei einigen Freunden und mir finden. Wir spielen gerne das Spiel "Call of Duty 4", wer das Spiel kennt, weiß sicherlich, dass man dort Erfahrung sowie neue Gegenstände freispielen kann. Diese Werte werden in einem Ordner gespeichert. Mein Programm, welches ich anstrebe, soll einfach als Backup dienen. Der Benutzer wählt einfach das Installationsverzeichnis von Call of Duty 4 (cod 4) aus und dann den Pfad, wo er den Ordner hinkopieren möchte. Dabei wird nur der Unterordner "players" kopiert, da sich in ihm die Dateien befinden, in denen die Werte des Spielers gespeichert sind (Erfahrung, freigespielte Waffen).

    Call of Duty 4 Profiler Layout

    [3.] Programmerklärungen:
    Im Folgenden möchte ich kurz die einzelen Buttons und deren Funktionen erklären:
    Menüleiste:
    Datei: Enthält den Punkt "Beenden", schließt also das Programm -->Funktioniert
    Automatik: Enthält den Punkt "Log-Dateien erstellen", genauere Erläuterung siehe unten --> Funktioniert
    Buttons:
    Von: Beim Klicken öffnet sich ein FolderBrowserDialog, wo der Benutzer das Installationsverzeichnis von Call of Duty 4 angibt --> Funktioniert
    Nach: Beim Klicken öffnet sich ein FolderBrowserDialog, wo der Benutzer den Speicherort angibt --> Funktioniert
    Kopieren: Beim Klicken kopiert das Programm den Ordner zum Zielordner -->Funktioniert
    Label: Die beiden Labels geben einfach nur den Pfad an, den der Benutzer angegeben hat --> Funktioniert

    [4.] Probleme
    Wie man meinem 3. Punkt entnehmen kann, läuft mein Programm eigentlich schon. Ich habe auch Fragen / Probleme bei einigen Feinheiten, der Übersichtshalber liste ich hier meine Fragen und Probleme auf und werde im 5. Gliederungspunkt meinen bisherigen Code veröffentlichen:

    Kurze Erklärung zu den "Log-Dateien":
    Sobald einmal der Quellpfad sowie der Zielpfad angegeben wurde, kann man diese Pfade in einer *.txt Datei abspeichern. Vorteil besteht darin, dass man sofern der Benutzer jedesmal denselben Pfad haben möchte nur 1.-Klick tätigen muss und es wird kopiert. Leider weiß ich nicht, wie man aus nur 1. *.txt Datei Zeilen ausliest, sonst hätte ich nur 2 "Log"-Dateien erstellt.

    *Wenn ich im Menü "Automatik" Log-Dateien erstellen drücke, erstellt mir mein Programm 3 *.txt Dateien mit dem angebenen Namen, doch leider enthält der Name den Präfix Debug, obwohl ich es nicht angegeben habe.

    *Wenn ich auf den Button "von" klicke und ein anderes Verzeichnis auswähle, soll eine Fehlermeldung erscheinen. Ich habe schon bei google gesucht, bekomme aber keine vernünftige Funktion hin, die Abfragt, ob im angegebenen Ordner das Unterverzeichnis "players" existiert.

    [5.] Code
    Damit mir geholfen werden kann, kopiere ich meinen kompletten Code:

    Menüleiste:
    Datei:
    Beenden
    Code vb:
    1
    2
    3
    
     Private Sub BeendenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BeendenToolStripMenuItem.Click
            Me.Close()
        End Sub

    Automatik:
    Log-Dateien erstellen
    Code vb:
    1
    2
    3
    4
    5
    
     Private Sub LogDateienErstellenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LogDateienErstellenToolStripMenuItem.Click
            My.Computer.FileSystem.WriteAllText(Application.StartupPath & "Log.txt", TimeOfDay & " von " & von & " nach " & vbCrLf & nach, True)
            My.Computer.FileSystem.WriteAllText(Application.StartupPath & "Readin.txt", von & "\players" & vbCrLf, False)
            My.Computer.FileSystem.WriteAllText(Application.StartupPath & "Readout.txt", nach & vbCrLf, False)
        End Sub

    Automatisches Laden
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
         Private Sub AutomatischesLadenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AutomatischesLadenToolStripMenuItem.Click
            Readin = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "Readin.txt")
            Readout = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "Readout.txt")
            von = Readin
            nach = Readout
            TextBox1.Text = Readin
            TextBox2.Text = Readout
            My.Computer.FileSystem.CopyDirectory(von, nach, FileIO.UIOption.AllDialogs, FileIO.UICancelOption.ThrowException)
        End Sub

    Buttons:
    Von
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    
     Private Sub cmdVon_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdVon.Click
            MsgBox("Wählen Sie bitte das Verzeichnis aus, in dem Sie Call of Duty 4 hinein installiert haben", , "Call of Duty 4 Installationsverzeichnis")
            FolderBrowserDialog1.ShowDialog()
            von = FolderBrowserDialog1.SelectedPath
            TextBox1.Text = von & "\players"
     
        End Sub

    Nach
    Code vb:
    1
    2
    3
    4
    5
    6
    
      Private Sub cmdNach_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNach.Click
            MsgBox("Wohin möchten Sie Ihren Profile-Ordner kopieren ?", , "Sicherungspfad")
            FolderBrowserDialog2.ShowDialog()
            nach = FolderBrowserDialog2.SelectedPath
            TextBox2.Text = nach
        End Sub

    Kopieren
    Code vb:
    1
    2
    3
    
     Private Sub cmdCopy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCopy.Click
            My.Computer.FileSystem.CopyDirectory(von & "\players", nach, FileIO.UIOption.AllDialogs, FileIO.UICancelOption.ThrowException)
        End Sub

    Meine Variablen Deklaration
    Code vb:
    1
    2
    3
    4
    5
    
     Public Class Form1
        Dim Readout As String
        Dim Readin As String
        Dim nach As String
        Dim von As String



    [5.] Schlusswort:
    Ich weiß, dass der Thread sehr lang ist, aber ich habe versucht alles so genau wie möglich zu beschreiben. Falls irgendwelche Fragen aufkommen, werde ich diese natürlich schnellstmöglich beantworten. Eigentlich ist mein Programm sehr simple gehalten, da es eigentlich nur kopiert, aber für mich als Neuling sind solche Dinge am Anfang noch recht komplex, gerade Abfragen, die überprüfen, ob im angebenen Verzeichnis ein Unterordner Namens "players" existiert usw. Ich weiß, dass es schwer fällt sich einfach auszudrücke, wenn man in der Materie drinsteckt. Doch bitte bedenkt, dass ich noch nicht soviel Ahnung habe und mit Fachwörtern oder sonstigen Abkürzungen Probleme haben werde. Ich möchte mich schon einmal im Voraus bei euch bedanken und schätze eure Mühe.
     
    Mit freundlichen Grüßen

    Lesterdor

  2. #2
    Peter86 Peter86 ist offline Mitglied Gold
    Registriert seit
    Jun 2008
    Beiträge
    132
    *Wenn ich im Menü "Automatik" Log-Dateien erstellen drücke, erstellt mir mein Programm 3 *.txt Dateien mit dem angebenen Namen, doch leider enthält der Name den Präfix Debug, obwohl ich es nicht angegeben habe.
    Probiers mal so.


    Code vbnet:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
          Private Sub LogDateienErstellenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LogDateienErstellenToolStripMenuItem.Click
       
                  My.Computer.FileSystem.WriteAllText(Application.StartupPath & "/" & "Log.txt", TimeOfDay & " von " & von & " nach " & vbCrLf & nach, True)
       
                  My.Computer.FileSystem.WriteAllText(Application.StartupPath & "/" & "Readin.txt", von & "\players" & vbCrLf, False)
       
                  My.Computer.FileSystem.WriteAllText(Application.StartupPath & "/" & "Readout.txt", nach & vbCrLf, False)
       
              End Sub

    Kurze Erklärung zu den "Log-Dateien":
    Sobald einmal der Quellpfad sowie der Zielpfad angegeben wurde, kann man diese Pfade in einer *.txt Datei abspeichern. Vorteil besteht darin, dass man sofern der Benutzer jedesmal denselben Pfad haben möchte nur 1.-Klick tätigen muss und es wird kopiert. Leider weiß ich nicht, wie man aus nur 1. *.txt Datei Zeilen ausliest, sonst hätte ich nur 2 "Log"-Dateien erstellt.
    So hätte ich das gelöst.

    Code vbnet:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
            Dim pfad As String = "pfade.txt" ' name der Textdatei die die pfade enthällt
            Dim pfadlist As New List(Of String)
            Dim SReader As New System.IO.StreamReader(pfad)
            While Not SReader.EndOfStream
                pfadlist.Add(SReader.ReadLine)
            End While
            SReader.Close()
            For Each pfad In pfadlist
                MsgBox(pfad)
            Next


    *Wenn ich auf den Button "von" klicke und ein anderes Verzeichnis auswähle, soll eine Fehlermeldung erscheinen. Ich habe schon bei google gesucht, bekomme aber keine vernünftige Funktion hin, die Abfragt, ob im angegebenen Ordner das Unterverzeichnis "players" existiert.
    Code vbnet:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
            Dim FDialog As New FolderBrowserDialog
            With FDialog
                .Description = "Bitte wählen Sie ihr CoD4 verzeichnis aus!"
                If .ShowDialog = Windows.Forms.DialogResult.OK Then
                    von = .SelectedPath
                    If Not System.IO.Directory.Exists(von & "\players") Then
                        MessageBox.Show("Der Ordner players konnte in """ & von & """ nicht gefunden werden!" & vbNewLine & "Bitte überprüfen Sie ihre auswahl.", _
                                        "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    Else
                        TextBox1.Text = von & "\players"
                    End If
                End If
            End With

    Guck dir aber die Codes Snippsel bitte nochmal an, denn von Copy>paste lernt man nichts :P
    Peter86
    Geändert von Peter86 (15.10.08 um 17:18 Uhr)
     

  3. #3
    Zvoni Zvoni ist offline Mitglied Platin
    Registriert seit
    Jul 2008
    Ort
    Hinter dem Mond gleich links
    Beiträge
    735
    Ich kenn mich zwar in VB.NET nicht aus, aber aus den 3 Logdateien würde ich 1 INI-Datei machen. Such/google mal nach "INI-Dateien unter VB.NET"

    In VB6 sind das zwei einfach API-Calls.
    Lesterdor bedankt sich. 
    Zwei Dinge sind unendlich: Die menschliche Dummheit und das Universum, nur bei letzterem bin ich mir noch nicht sicher. - Albert Einstein

    Code vb:
    1
    
    If Beitrag.Hilfreich=True Then Bewertung.Send("Positiv")

  4. #4
    Avatar von Shogoki92
    Shogoki92 Shogoki92 ist offline Mitglied Bronze
    Registriert seit
    Oct 2008
    Beiträge
    28
    Hallo Lesterdor.

    Bei deinem Problem it der Abfrage ob der Unterordner "\players" in dem gewählten verzeichnis existiert kann ich dir helfen. Das ist ganz einfach.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    [COLOR="DarkGreen"]'Also hier erstal der Teil von deinem Code noch[/COLOR]
     
           Private Sub cmdNach_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNach.Click
     
                   MsgBox("Wohin möchten Sie Ihren Profile-Ordner kopieren ?", , "Sicherungspfad")
     
                   FolderBrowserDialog2.ShowDialog()
     
                  nach = FolderBrowserDialog2.SelectedPath
    [COLOR="DarkGreen"]'Und hier jetzt die Abfrage [/COLOR]
     
     [COLOR="DarkOrange"]If My.Computer.FileSystem.DirectoryExists(nach & "\players") Then
                TextBox2.Text = nach
            Else
                MsgBox("Falsches verzeichnis")
                nach = Nothing
            End If[/COLOR]
                 
     
              End Sub

    Ich hoffe ich konnte dir helfen
    Lesterdor bedankt sich. 

  5. #5
    Peter86 Peter86 ist offline Mitglied Gold
    Registriert seit
    Jun 2008
    Beiträge
    132
    Du musst nich nach abfragen, sondern von. Ausserdem halte ich deine Lösung nicht gerade sinnvoll, denn wenn ich z.B. auf Abbrechen drücke, werde ich darauf hingewiesen, das es das Falsche verzeichnis ist. Ich empfehle meine lösung

    Peter86
    Geändert von Peter86 (15.10.08 um 17:35 Uhr)
     

  6. #6
    Lesterdor Lesterdor ist offline Mitglied Gold
    Registriert seit
    Sep 2008
    Beiträge
    101
    Guten Abend liebe Community,

    vielen lieben Dank, es funktioniert alles wie gewünscht. Danke für eure Hilfe
     
    Mit freundlichen Grüßen

    Lesterdor

  7. #7
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Als kleiner Hinweis um Pfadangaben zu erstellen benutze am besten die Path.Combine Methode (Namespace System.IO)
    Code :
    1
    
    Path.Combine(Application.StartupPath, "Log.txt")
    Somit brauchst du dich nicht um "/" kümmern und ist einfach die sichere Methode.

    Um aus einer Datei zulesen kannst du dir ja mal StreamReader anschauen oder zum schreiben StreamWriter.
    (Müssten beide im Namespace System.IO sein)

    Edit:
    Sehe grad Peter hat ja schon StreamReader in seinem Quellcode.
    Geändert von Spyke (15.10.08 um 19:02 Uhr)
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

Ähnliche Themen

  1. [After Effects] Benötige Hilfe bei "Umblättern"-Effekt
    Von Webesek im Forum Videoschnitt, Videotechnik & -produktion
    Antworten: 3
    Letzter Beitrag: 02.10.11, 16:48
  2. Benötige Hilfe zu "include"
    Von G4 94 im Forum PHP
    Antworten: 11
    Letzter Beitrag: 03.01.09, 16:28
  3. Antworten: 4
    Letzter Beitrag: 16.05.07, 13:57
  4. Benötige Hilfe bei " if-Funktion "
    Von Luckai9842 im Forum Javascript & Ajax
    Antworten: 7
    Letzter Beitrag: 16.04.07, 16:27
  5. Design-Hilfe bei meinem "Wüsten-Game"
    Von Kalma im Forum Creative Lounge
    Antworten: 0
    Letzter Beitrag: 22.09.06, 17:01