Fehlermeldung bei Files entpacken

Alle Fragen zur Programmierung, die nicht in die speziellen Themen passen
Antworten
gambasso
Foriker
Beiträge: 920
Registriert: Sa 17. Mär 2012, 09:55
Kontaktdaten:

Fehlermeldung bei Files entpacken

Beitrag von gambasso » Mo 22. Jan 2018, 11:55

moin,

ich versuche gerade von Gambas aus gepackte Files in ein Verzeichnis zu entpacken.
Zum Enpacken benutze ich '7z' über einen 'Shell' - Befehl
Einiges Files haben einen Filenamen, der dem 'Entpacker' nicht gefällt und in der Konsole wird eine Fehlermeldung ausgegeben.
Ich möchte aber gerne im Programm feststellen können, daß ein Fehler aufgetreten ist, damit ich reagieren kann.

Wie bekomme ich die Fehlermeldung ins Programm?
Gruss

Benutzeravatar
4tionov
Site Admin
Beiträge: 237
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Fehlermeldung bei Files entpacken

Beitrag von 4tionov » Mo 22. Jan 2018, 13:06

Wie bekomme ich die Fehlermeldung ins Programm?
Mit dieser Klasse (Name ist DegShellBasic): gambas code
' Gambas class file

''' Kommandos von der Shell ausführen lassen

Property Read Output As String
Property Read ErrorMessage As String

Private $outputText As String
Private $ErrorMessage As String
Private $environment As String[]
Private $DoNotRaiseError As Boolean
Private $Cmd As String

Public Sub setEnv(strEnv As String[])

    $environment = strEnv

End

'' Übergibt den Befehl an die Shell. Liefert
'' das Ergebnis des Shellaufrufes.

Public Function Workfast(command As String, Optional DoNotRaiseError As Boolean) As String

    $DoNotRaiseError = DoNotRaiseError

    If $environment Then
        Shell command With $environment For Read As "Process"
    Else
        Shell command Wait For Read As "Process"
    Endif

    If $ErrorMessage And DoNotRaiseError = False Then
        Error.Raise("Fehler in DegShellBasic.Workfast: " & $ErrorMessage)
    Endif

    Return Me.Output

Catch
    Error.Propagate

End

Public Sub Process_Read()

    Dim txt As String
    ' ausgabe der shell
    '
    ' Das nicht verwenden:
    '
    ' txt &= Read #Last, -256
    '
    ' liefert newline am ende, damit brechen übergaben an workfast
    ' wie "cd " & $tempdir & ";touch " & $ProcessFileName & ".tex"
    ' weil dann daraus "cd xyzdit\n;touch kaas"
    ' entsteht.

    ' liefert nur den Inhalt de shellausgabe

    Line Input #Last, txt
    $outputText &= txt

Catch
    'Debug Error.Text
    Error.Propagate

End

'' Error wird aufgerufen, wenn der Shellprozess einen Fehler ausgibt
'' Standardmäßig wird der Fehler ausgegeben. Er kannn aber auch unterdrückt (DoNotRaiseError)
'' werden und ist dann in ErrorMessage lesbar

Public Sub Process_Error(ShellError As String)

    $ErrorMessage &= ShellError
    If $DoNotRaiseError = False Then
        Debug ShellError
    Endif

End

Private Function Output_Read() As String

    Return $outputText

End

Private Function ErrorMessage_Read() As String

    Return $ErrorMessage

End

Aufruf geht so:
gambas code
Dim sh as new DegShellBasic

sh.Workfast("let '1/0'")

Catch
    Message.Error(Error.Text)
Alles Gute,

4tionov

Antworten

Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 7 Gäste