Fehlermeldung (MsgBox) beim Kopieren über Timer

Rookie_11

Grünschnabel
Hallo Allerseits...
Hab hier n kleines Problem und bräuchte mal Hilfe..
Ich kopiere (Code s.u) mittels einem Timer eine Datei alle 5 Min.
Ich möchte gerne, wenn das kopieren in die Hose geht, eine MsgBox öffnen wo einfach nur Fehler drinsteht. Und der Timer soll auch anghalten werden.
Krieg das irgendwie nicht auf die Reihe.
Muß gleich vorneweg sagen das ich noch absoluter Anfänger bin. Also langsam und ruhig schreiben. Ich bin blond.. :)
Habe hier VS.NET 2003 und wäre echt Dankbar für eure Hilfe!!

Dim sFile As String
Dim sCopyTo As String
' Ausgangsdatei
sFile = "c:\TEST1\test.txt"

' Neues Ziel
sCopyTo = "c:\TEST2\test.txt"

' Datei kopieren
FileCopy(sFile, sCopyTo)

Gruß
Rookie
 

ksk

Erfahrenes Mitglied
Probier´s mal in einem Try-Catch Block

Code:
Try
    Dim sFile As String
    Dim sCopyTo As String

    sFile = "c:\TEST1\test.txt"
    sCopyTo = "c:\TEST2\test.txt"
    FileCopy(sFile, sCopyTo)
Catch ex As Exception
    MessageBox.Show(ex.Message)
'oder
    MsgBox(ex.Message)
End Try
Wenn du an einer ASP-Seite arbeitest dann gib die Message in JavaScript aus
Code:
    Response.Write("<script language=javascript> alert('" & ex.Message & "!');</script>")

Hoffe das hilft



Gruß
ksk
 

Rookie_11

Grünschnabel
Funktioniert Super!

Aber wie wird der Timer wieder gestartet wenn man "ok" drückt

Hatte das jetzt so probiert:

If MessageBoxButtons.OK = True Then

Timer.Enabled = True

End If

Aber irgendwie es nicht...
Zeigt mir auch keinen Fehler im Code an.
Oder ist das ganze wieder ein Catch-Event?

Gruß
Andre
 

Christian Kusmanow

Erfahrenes Mitglied
Hi Andre!

Willkommen im Forum!

Warum schaust Dir nicht vorweg mal alle MSDN Casts und CodeClips zur Entwicklung mit Windows Forms genauer an?

Es ist sicherlich am einfachsten die Frameworkmeldung auszugeben, aber ganz bestimmt nicht immer praktisch.
Ich würde die Frameworkmeldung fast immer nur im Debug Modus ausgeben.

In dem folgenden Post findest alle Möglichkeiten Dateizugriffsfehler auszuschlüsseln:
[post=1324680]AW: Großer Anfänger Thread - Post[/post]
Könntest Dir für das Behandeln der Fehler eine Klasse implementieren, die Du anschließend auch noch weiter verwenden kannst.
C#:
public class FileErrorHandler
{
	Exception _Exception;
	string _fileName;


	/// <summary>
	/// Im Konstukor wird die Exception gespeichert und anschließend behandelt.
	/// </summary>
	public FileErrorHandler( Exception ex, string fileName ) {
		_Exception = ex;
		_fileName = fileName;
		HandleException();
	}


	void HandleException() {
		
		if ( _Exception is ArgumentException )
			Show_ArgumentException( _Exception );
		else if ( _Exception is ArgumentNullException )
			Show_ArgumentNullException( _Exception );
		else if ( _Exception is NotSupportedException )
			Show_NotSupportedException( _Exception );
		else if ( _Exception is PathTooLongException )
			Show_PathTooLongException( _Exception );
		else if ( _Exception is FileNotFoundException )
			Show_FileNotFoundException( _Exception );
		else if ( _Exception is DirectoryNotFoundException )
			Show_DirectoryNotFoundException( _Exception );
		else if ( _Exception is IOException )
			Show_IOException( _Exception );
		else if ( _Exception is UnauthorizedAccessException )
			Show_UnauthorizedAccessException( _Exception );
		else if ( _Exception.GetType() != typeof (Exception) )
			Show_UnusualException( _Exception );
		else Show_Exception( _Exception );
	}

	// TODO: Benutzer Dialoge
}
Schaut jetzt vielleicht nach viel aus, aber wenn Du das einmal fertig hasst, kannst es ohne Probleme weiter verwenden.
Bau Propertys ein damit Du auf Abbrechen oder das Wiederholen der Aktion vom Benutzer reagieren kannst.
Kannst auch von der Klasse ableiten, und die Meldungen für bestimmte Vorgänge somit
spezifischer gestalten.

@MessageBoxButtons: Bitte auch immer erst ObjektBrowser konsultieren. Wenn Du kein VS hast,
kannst das auch auf der MSDN nachlesen. MessageBoxButtons ist eine Enumeration
und kein boolscher Wert. Daher wirst das nur einem Objekt der MessageBoxButtons Enumeration vergleichen können...
 
Zuletzt bearbeitet:

ksk

Erfahrenes Mitglied
Hallo Rookie!

Das was Kusmanow meint ist sicherlich die gescheitere, aber es gibt für den Try-Catch Block auf einen Finally Block, diese jedes mal abgefragt wird.

Code:
      Try
          Dim sFile As String
          Dim sCopyTo As String

          sFile = "c:\TEST1\test.txt"
          sCopyTo = "c:\TEST2\test.txt"
          FileCopy(sFile, sCopyTo)
      Catch ex As Exception
          MessageBox.Show(ex.Message)
      'oder
          MsgBox(ex.Message)
      Finally
          'Hier könntest du ...
      End Try


Probier mal das mit dem Finally Block, ansonnsten ist eine genauere Fehlerausgabe wie von Kusmanow gescheitere.
 
Zuletzt bearbeitet:

Christian Kusmanow

Erfahrenes Mitglied
@ksk: Sorry, aber sind wir hier auf 'nem Schulhof? :rolleyes:
So komm ich mir jetzt grad zumindest vor. Entweder Christian oder cosmo bitte.

@Topic: Dazu muss ich anmerken, dass der Finally-Block wird nur benötigt wird,
wenn die Exception aus irgend welchen Gründen auch immer, mittels throw weiter gereicht werden soll.
 

ksk

Erfahrenes Mitglied
Na mein gott, nur weil dein Nachname erwähnt wurde sind wir gleich im Schulhof. Ich glaub ich komm mir vor wie in einem Schulhof, wenn mir jemand sowas sagen muss. Naja, ist ja auch egal. Schließlich will ich hier niemanden kränken oder ähnliches.

Das mit dem Finally dient nicht nur dazu das man die eigene Exeption ausgeben kann, sondern man kann hier genauso geöffnete Verbindungen schließen sowie auch andere Sachen überprüfen.
 

Christian Kusmanow

Erfahrenes Mitglied
Ich glaub ich komm mir vor wie in einem Schulhof, wenn mir jemand sowas sagen muss.
Da sind wir ja einer Meinung. ;)
Es ist eine Höflichkeitsfrage und dank der Forenregeln ergo auch indiskutabel.

Das mit dem Finally dient nicht nur dazu das man die eigene Exeption ausgeben kann, sondern man kann hier genauso geöffnete Verbindungen schließen sowie auch andere Sachen überprüfen.
Ich gebe Dir Recht ksk, aber meinte _nicht_ das man in einem finally-Block weitere Exceptions werfen sollte.
Wollte sagen das der finally-Block immer ausgeführt wird, auch wenn in einem vorran stehenden catch-Block
eine Exception weitergereicht und somit die aktuelle Methode verlassen wird.
Somit hat man wie ksk schon sagte Gelegenheit, alle geöffneten Resourcen zu schließen
bzw. speicherbereinigende Maßnahmen durchzuführen, die durch das Scheitern des Vorgangs nicht ausgeführt werden konnten.

[thread=249368]Exception Handling - Linkliste - Stickie[/thread]
 
Zuletzt bearbeitet:

Rookie_11

Grünschnabel
He! Hallo Nicht streiten Jungs...
Ihr haut mir hier Begriffe um die Ohren... Bei mir klingelts schon!
Soweit bin ich noch gar nicht... Hatte ich nicht erwähnt das ich noch absoluter Anfänger bin?
Trotzdem erstmal Danke das ihr euch Zeit nehmt für meinem Kram!!
Muß ja auch mal gesagt werden..

Gruß
Andre