none
Ungültige Konvertierung von der Zeichenfolge~ Dringende hilfe! RRS feed

  • Frage

  • Moin also ich verzweifel derzeitig hier an meinem eigenen gefussel~ Also der Fehler der ständig und immer wieder auftritt ist das hier...

    Vielleicht kann mir ja einer weiterhelfen.


    Programm erklärung:

    Im Prinzip soll es die Datei(in diesem Falle eine .rar) Herunterladen und in einem Ordner entpacken. (Versions abfrage etc funktioniert... nur das entpacken einfach nicht...)

    [quote]Ungültige Konvertierung von der Zeichenfolge D:\Program Files (x86)\Steam\Ste in Typ Integer.[/quote]

    Imports System
    Imports System.IO
    Imports System.ComponentModel
    Imports Microsoft.Win32
    Imports System.Diagnostics
    Imports System.Int64
    Imports System.IO.PathTooLongException
    Public Class Form1
    Dim tRestant As Int64
    Dim tEcoule As Int64
    Dim TailleFichier As Int64 = 0
    Dim TailleFichier2 As Int64 = 0
    Dim seconde As Boolean = True
    Dim min As Int64 = 0
    Dim max As Int64 = 1
    Dim pbarvalue As Int64 = 0
    Dim directory As String = "nochange"
    Dim file As String
    Private Sub UnRar(ByVal filepath As String, ByVal WorkingDirectory As String)
    
    Dim objRegKey As RegistryKey
    objRegKey = Registry.ClassesRoot.OpenSubKey("WinRAR\Shell\Open\Command")
    
    Dim obj As Object = objRegKey.GetValue("")
    
    Dim objRarPath As String = obj.ToString()
    objRarPath = objRarPath.Substring(1, objRarPath.Length - 7)
    
    objRegKey.Close()
    
    Dim objArguments As String
    objArguments = " X " & " " & filepath & " " + " " + WorkingDirectory
    
    Dim objStartInfo As New ProcessStartInfo()
    objStartInfo.UseShellExecute = True
    objStartInfo.FileName = objRarPath
    objStartInfo.Arguments = objArguments
    objStartInfo.WindowStyle = ProcessWindowStyle.Hidden
    objStartInfo.WorkingDirectory = WorkingDirectory & ""
    
    Dim objProcess As New Process()
    objProcess.StartInfo = objStartInfo
    objProcess.Start()
    
    End Sub
    Private Sub FlatButton1_Click(sender As Object, e As EventArgs) Handles FlatButton1.Click
    FolderBrowserDialog1.ShowDialog()
    directory = FolderBrowserDialog1.SelectedPath
    My.Computer.FileSystem.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma")
    My.Computer.FileSystem.WriteAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\directory.a3", directory, False)
    End Sub
    
    Private Sub FlatButton5_Click(sender As Object, e As EventArgs) Handles FlatButton5.Click
    If My.Computer.FileSystem.FileExists(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\directory.a3") Then
    file = My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\directory.a3") & "\arma3.exe"
    Process.Start(file, (" -mod=\LauncherArma\@ProjectLife;\LauncherArma\@CBA_A3; -connect=5.231.193.132:2302"))
    Else
    MsgBox("Please specify the path to your ArmA III folder.", MsgBoxStyle.Critical, "Error")
    End If
    
    End Sub
    Private Sub FlatButton2_Click(sender As Object, e As EventArgs) Handles FlatButton2.Click
    If My.Computer.FileSystem.FileExists(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\size.txt") Or My.Computer.FileSystem.FileExists(My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\directory.a3") & "\Addon.rar") Then
    MsgBox("You have already downloaded the mod! Check if an update is available.", MsgBoxStyle.Exclamation, "Error")
    Else
    If directory = "nochange" Then
    MsgBox("Please select the Arma 3 directory!", MsgBoxStyle.Critical, "Error")
    Else
    tEcoule = 0
    PictureBox1.Visible = False
    FlatProgressBar1.Visible = True
    FlatLabel1.Visible = True
    FlatLabel2.Visible = True
    FlatLabel3.Visible = True
    Timer2.Start()
    BackgroundWorker1.RunWorkerAsync()
    End If
    End If
    End Sub
    
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    If My.Computer.FileSystem.FileExists(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\directory.a3") Then
    directory = My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\directory.a3")
    Else
    MsgBox("Please select your Arma III directory first!", MsgBoxStyle.Information, "Important")
    End If
    End Sub
    
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Dim FichierInfo As System.IO.FileInfo = New System.IO.FileInfo(My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\directory.a3") & "\Addon.rar")
    Dim TailleFichier As Int64 = FichierInfo.Length
    Dim size As Int64 = My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\size.txt")
    pbarvalue = TailleFichier / size * 100
    FlatProgressBar1.Value = pbarvalue
    If pbarvalue = 100 Then
    FlatButton6.Visible = True
    Timer3.Stop()
    Timer1.Stop()
    MsgBox("Please Install the Files now.", MsgBoxStyle.Information, "Ready to Install")
    
    End If
    End Sub
    
    Private Sub FlatButton4_Click(sender As Object, e As EventArgs) Handles FlatButton4.Click
    If My.Computer.FileSystem.FileExists(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\version-OLD.txt") Then
    My.Computer.Network.DownloadFile("ftp://altis:life@5.231.193.132:22/version.txt", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\version.txt")
    If My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\version.txt") = My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\version-OLD.txt") Then
    My.Computer.FileSystem.DeleteFile(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\version.txt")
    MsgBox("No updates are available", MsgBoxStyle.Information, "Addons Update")
    ElseIf My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\version.txt") <> My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\version-OLD.txt") Then
    My.Computer.FileSystem.DeleteFile(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\version-OLD.txt")
    My.Computer.FileSystem.RenameFile(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\version.txt", "version-OLD.txt")
    My.Computer.FileSystem.DeleteFile(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\size.txt")
    My.Computer.FileSystem.DeleteFile(My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\directory.a3") & "\Addon.rar")
    tEcoule = 0
    PictureBox1.Visible = False
    FlatProgressBar1.Visible = True
    FlatLabel1.Visible = True
    FlatLabel2.Visible = True
    FlatLabel3.Visible = True
    Timer2.Start()
    BackgroundWorker1.RunWorkerAsync()
    End If
    Else
    MsgBox("Please download the newest Version of the Mod.", MsgBoxStyle.Exclamation, "Error")
    End If
    End Sub
    
    Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
    Timer1.Start()
    Timer3.Start()
    Timer2.Stop()
    End Sub
    
    Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    My.Computer.Network.DownloadFile("ftp://altis:life@5.231.193.132:22/size.txt", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\size.txt")
    My.Computer.Network.DownloadFile("ftp://altis:life@5.231.193.132:22/Addon.rar", My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\directory.a3") & "\Addon.rar")
    If My.Computer.FileSystem.FileExists(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\version.txt") Then
    ElseIf My.Computer.FileSystem.FileExists(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\version-OLD.txt") Then
    My.Computer.FileSystem.DeleteFile(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\version-OLD.txt")
    End If
    My.Computer.Network.DownloadFile("ftp://altis:life@5.231.193.132:22/version.txt", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\version-OLD.txt")
    End Sub
    
    Private Sub Timer3_Tick(sender As Object, e As EventArgs) Handles Timer3.Tick
    Dim size As Int64 = My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\size.txt")
    tEcoule += 1
    FlatLabel1.Text = "Time Passed : " & tEcoule & " sec"
    If seconde = True Then
    Dim FichierInfo As System.IO.FileInfo = New System.IO.FileInfo(My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\directory.a3") & "\Addon.rar")
    TailleFichier = FichierInfo.Length
    FlatLabel3.Text = "Download Speed :" & (TailleFichier - TailleFichier2) / 1000 & " (MB/s)"
    tRestant = (size - TailleFichier) / (TailleFichier - TailleFichier2)
    seconde = False
    ElseIf seconde = False Then
    Dim FichierInfo As System.IO.FileInfo = New System.IO.FileInfo((My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\directory.a3") & "\Addon.rar"))
    TailleFichier2 = FichierInfo.Length
    FlatLabel3.Text = "Download Speed : " & (TailleFichier2 - TailleFichier) / 1000 & " (MB/s)"
    seconde = True
    tRestant = (size - TailleFichier) / (TailleFichier2 - TailleFichier)
    End If
    FlatLabel2.Text = "Time Remaining : " & tRestant & " sec"
    End Sub
    
    Private Sub FlatButton3_Click(sender As Object, e As EventArgs)
    MsgBox("Credits :" & vbNewLine & vbNewLine & "Project:Life Arma 3 Launcher" & vbNewLine & vbNewLine & "" & vbNewLine & vbNewLine & "--", MsgBoxStyle.Information, "Crédits")
    End Sub
    
    Private Sub FlatButton6_Click(sender As object, e As EventArgs) Handles FlatButton6.Click
    If My.Computer.FileSystem.DirectoryExists(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\LauncherArma") Then
    My.Computer.FileSystem.DeleteDirectory(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\LauncherArma", FileIO.DeleteDirectoryOption.DeleteAllContents)
    End If
    If My.Computer.FileSystem.FileExists(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\modsname.txt") Then
    ' My.Computer.FileSystem.DeleteFile(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\modsname.txt")
    End If
    My.Computer.FileSystem.CreateDirectory(My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\directory.a3") & "\LauncherArma")
    UnRar(My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\directory.a3") & "\Addon.rar", Environment.GetFolderPath(My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\directory.a3") & "\LauncherArma"))
    Dim ligne As String
    My.Computer.Network.DownloadFile("ftp://altis:life@5.231.193.132:22/modsname.txt", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\modsname.txt")
    Dim sr As New StreamReader(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\modsname.txt")
    While sr.Peek <> -1
    ligne = sr.ReadLine()
    ' My.Computer.FileSystem.CopyDirectory(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\LauncherArma\" & ligne, directory & "\" & ligne, True)
    End While
    PictureBox1.Visible = True
    FlatButton6.Visible = False
    FlatProgressBar1.Visible = False
    FlatLabel1.Visible = False
    FlatLabel2.Visible = False
    FlatLabel3.Visible = False
    End Sub
    
    Private Sub PictureBox2_Click(sender As Object, e As EventArgs) Handles PictureBox2.Click
    
    End Sub
    
    Private Sub FlatLabel2_Click(sender As Object, e As EventArgs) Handles FlatLabel2.Click
    
    End Sub
    
    Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
    Process.Start("http://altis.paradox-network.de")
    End Sub
    
    Private Sub FlatLabel1_Click(sender As Object, e As EventArgs) Handles FlatLabel1.Click
    
    End Sub
    
    Private Sub FlatLabel3_Click(sender As Object, e As EventArgs) Handles FlatLabel3.Click
    
    End Sub
    
    Private Sub FlatProgressBar1_Click(sender As Object, e As EventArgs) Handles FlatProgressBar1.Click
    
    End Sub
    
    Private Sub FormSkin1_Click(sender As Object, e As EventArgs) Handles FormSkin1.Click
    FlatButton6.Visible = True
    End Sub
    
    Private Sub FlatButton3_Click_1(sender As Object, e As EventArgs) Handles FlatButton3.Click
    My.Computer.FileSystem.DeleteFile(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\size.txt",
    Microsoft.VisualBasic.FileIO.UIOption.AllDialogs,
    Microsoft.VisualBasic.FileIO.RecycleOption.DeletePermanently,
    Microsoft.VisualBasic.FileIO.UICancelOption.DoNothing)
    My.Computer.FileSystem.DeleteFile(My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\directory.a3") & "\Addon.rar",
    Microsoft.VisualBasic.FileIO.UIOption.AllDialogs,
    Microsoft.VisualBasic.FileIO.RecycleOption.DeletePermanently,
    Microsoft.VisualBasic.FileIO.UICancelOption.DoNothing)
    End Sub
    End Class


    Montag, 9. März 2015 00:32

Antworten

  • Hallo,

    Dein Kern-Problem ist Deine Copy'n Paste Programmierung, die Dich den Überblick gekostet haben dürfte.

    Die Methode ReadAllText (ohne My.BlaBla) liest eine Textdatei ein und hat hier (und anderen Stellen) nichts zu suchen. Im Falle einer binären RAR Datei führt sie zu unerwünschten Verhalten, sobald ein ungültiges Zeichen vorkommt.

    Richtig wäre Path.Combine, um einen Pfad aus mehreren Bestandteilen zusammenzusetzen.

    Zudem würde ich Dir vorschlagen, einmal einige Eigenschaften einzufügen, um den Überblick wieder zu gewinnen, z. B.:

        Public ReadOnly Property A3Directory As String
            Get
                Return Path.Combine(ApplicationPath, "directory.a3")
            End Get
        End Property
    
        Public ReadOnly Property ApplicationPath As String
            Get
                Return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "LauncherArma")
            End Get
        End Property
        Public ReadOnly Property DocumentPath As String
            Get
                Return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "LauncherArma")
            End Get
        End Property
    

    (Wobei es nur eine Auswahl der auf den ersten Blick häufiger vorkommenden Varianten ist.)

    Damit könnte das UnRar(....) Monster verkürzt werden zu:

    UnRar(Path.Combine(A3Directory, "Addon.rar", Path.Combine(A3Directory , "LauncherArma"))

    was die Zeile nicht nur richtiger, sondern deutlich freundlicher lesen lässt.

    Das Gleiche wirst Du bei weiteren Stellen machen müssen, mindestens bei AddOn.Rar, denn dort kann es ebenso "scheppern" - die mit DownloadFile, Delete...

    Aber wenn Du etwas Suchen und Ersetzen spielst, so kannst Du mit den drei Eigenschaften (und vielleicht noch einigen weiteren) den Code auf einen Bruchteil des jetzigen kürzen.

    Womit sich andere Fehler in Zukunft leichter finden oder gar vermeiden lassen sollten.

    Wenn Du das Ganze fortführst lassen sich weitere Stellen finden, wo die eine oder andere Hilfsmethode bzw. Eigenschaft den Code verkürzen und einfacher beherrschbar machen kann - wie die Dateivergleiche, Löschen, wenn... usw.

    Gruß Elmar

    Montag, 9. März 2015 19:59

Alle Antworten

  • Hi,
    setze zuerst

    Option Strict On

    und korrigiere alle impliziten Typkonvertierungen und die Zeile in Deinem Code

        Dim size As Int64 = My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\size.txt")
    

    Einer Ganzzahlvariablen kann man keine Zeichenkette zuweisen. Vermutlich willst Du die Länge der Zeichenkette ermitteln. Dazu gibt es die Len-Funktion für kleinere Dateien (int32) oder Du nutzt FileInfo.Length (int64).


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    Montag, 9. März 2015 05:43
  • Erstmal danke für die Information.

    Das oben genante funktioniert bereits, mein Problem ist das die "UnRar" Funktion die 

    My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\directory.a3")

    nicht erkennt und den Fehler der oben bereits beschrieben ist ausspuckt. (in der 

    directory.a3
    wird der vom User angegebene Pfad festgelegt.
    • Bearbeitet xKazuto Montag, 9. März 2015 11:15
    Montag, 9. März 2015 11:14
  • Hallo,
    ich verstehe nicht so wirklich, wo das Problem liegt. Wenn der von dir oben genannte Fehler auftritt, markiert die Visual Studio die Zeile und du weißt das du dort versuchst hast die Pfadangabe in eine Zahl zu konvertieren. Behebe den Fehler entsprechend.

    Und auch wenn dein Code funktioniert solltest du Option Strict On machen - so lassen sich nämlich solche Fehler sehr viel besser vermeiden.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Montag, 9. März 2015 14:34
    Moderator
  • Es kann sein das ich blind bin oder so, nur ich finde nicht wo ich den Pfad als zahl konvertiert habe...
    Montag, 9. März 2015 14:48
  • Und genau das zeigt dir Visual Studio (mit den Standardeinstellung) an, wenn du die Anwendung debuggst.

    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Montag, 9. März 2015 14:50
    Moderator
  • Additional information: Ungültige Konvertierung von der Zeichenfolge D:\Program Files (x86)\Steam\Ste in Typ Integer.

    Das sollte heißen ich habe die Zeile hier: 

    UnRar(My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\directory.a3") & "\Addon.rar", Environment.GetFolderPath(My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\directory.a3") & "\LauncherArma"))

    als Zahl definiert? nur wo...?

    Montag, 9. März 2015 15:20
  • Du hast nicht die Zeile als Zahl definiert, sondern konvertierst ausersehen etwas in eine Zahl, was aber keine Zahl ist.
    Environment.GetFolderPath macht nämlich etwas anderes, als du wahrscheinlich erwartest. Du suchst wahrscheinlich die Path.GetDirectoryName-Methode.

    Und der Fehler wäre mit dem Option Strict On mit einer ganz detaillierten Compiler-Fehlermeldung und einem kurzen Blick in die MSDN erledigt gewesen...


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Montag, 9. März 2015 15:47
    Moderator
  • Also Path.GetDirectoryName, dann führt er mich zu D:/folder/folder

    was ich jedoch brauche ist das er aus der directory.a3 den Pfad ausliest die und RAR in diesem Pfad entpackt. 


    • Bearbeitet xKazuto Montag, 9. März 2015 16:17
    Montag, 9. März 2015 16:17
  • Wenn ich dich jetzt richtig verstehe, dann steht in dieser directory.a3-Datei ein Pfad. Diesen willst du an die UnRar-Methode übergeben, dann mach das doch? Ich verstehe einfach nicht wo das Problem liegt, wenn man sich mal die Dokumentation der Methoden durchgelesen hat.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Montag, 9. März 2015 16:30
    Moderator
  • "Diesen willst du an die UnRar-Methode übergeben, dann mach das doch"

    Genau das versuche ich jetzt seit ca. 48 stunden raus zu finden wie ich dies mache. 

    Habe mir bereits zich Videos, Dokumentation und Tutorials angeschaut, jedoch will keiner dieser mir irgendwie weiterhelfen egal wie oft ich diese frage... 


    • Bearbeitet xKazuto Montag, 9. März 2015 16:53
    Montag, 9. März 2015 16:52
  • Hi,
    hast Du Option Strict On gesetzt? Ist der Übersetzungslauf fehlerfrei? 

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    Montag, 9. März 2015 17:12
  • Also "Option Strict On" ist aktiv ja, soweit ich sehe ist der Übersetzungslauf fehlerfrei. (jedenfalls wird nichts angezeigt)
    Montag, 9. März 2015 17:25
  • Hi,
    dann zeig nochmals die Codezeile, die die ungültige Konvertierung wirft und zeig zusätzlich die Inhalte der dort genutzten Variablen.

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    Montag, 9. März 2015 18:42
  • Zeile 177

    UnRar(My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\directory.a3") & "\Addon.rar", Environment.GetFolderPath(My.Computer.FileSystem.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\LauncherArma\directory.a3") & "\LauncherArma"))

    Eigendlich soll er das so machen:

    UnRar ist oben definiert als Funktion, er soll die Funktion benutzen und den Pfad aus datei "directory.a3" (die sich im ordner "/launcherarma/directory.a3" befindet) und dort die addon.rar entpacken in den gleichen ordner wo auch die .rar bereits IST.


    • Bearbeitet xKazuto Montag, 9. März 2015 18:58 mehr Information hinzugefügt
    Montag, 9. März 2015 18:44
  • Hallo,

    Dein Kern-Problem ist Deine Copy'n Paste Programmierung, die Dich den Überblick gekostet haben dürfte.

    Die Methode ReadAllText (ohne My.BlaBla) liest eine Textdatei ein und hat hier (und anderen Stellen) nichts zu suchen. Im Falle einer binären RAR Datei führt sie zu unerwünschten Verhalten, sobald ein ungültiges Zeichen vorkommt.

    Richtig wäre Path.Combine, um einen Pfad aus mehreren Bestandteilen zusammenzusetzen.

    Zudem würde ich Dir vorschlagen, einmal einige Eigenschaften einzufügen, um den Überblick wieder zu gewinnen, z. B.:

        Public ReadOnly Property A3Directory As String
            Get
                Return Path.Combine(ApplicationPath, "directory.a3")
            End Get
        End Property
    
        Public ReadOnly Property ApplicationPath As String
            Get
                Return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "LauncherArma")
            End Get
        End Property
        Public ReadOnly Property DocumentPath As String
            Get
                Return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "LauncherArma")
            End Get
        End Property
    

    (Wobei es nur eine Auswahl der auf den ersten Blick häufiger vorkommenden Varianten ist.)

    Damit könnte das UnRar(....) Monster verkürzt werden zu:

    UnRar(Path.Combine(A3Directory, "Addon.rar", Path.Combine(A3Directory , "LauncherArma"))

    was die Zeile nicht nur richtiger, sondern deutlich freundlicher lesen lässt.

    Das Gleiche wirst Du bei weiteren Stellen machen müssen, mindestens bei AddOn.Rar, denn dort kann es ebenso "scheppern" - die mit DownloadFile, Delete...

    Aber wenn Du etwas Suchen und Ersetzen spielst, so kannst Du mit den drei Eigenschaften (und vielleicht noch einigen weiteren) den Code auf einen Bruchteil des jetzigen kürzen.

    Womit sich andere Fehler in Zukunft leichter finden oder gar vermeiden lassen sollten.

    Wenn Du das Ganze fortführst lassen sich weitere Stellen finden, wo die eine oder andere Hilfsmethode bzw. Eigenschaft den Code verkürzen und einfacher beherrschbar machen kann - wie die Dateivergleiche, Löschen, wenn... usw.

    Gruß Elmar

    Montag, 9. März 2015 19:59