vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
InvalidOperationException 
Autor: veneror
Datum: 02.07.12 20:24

Hallo zusammen,

ich habe mir ein kleines Programm geschrieben, dass letztendlich erst einmal überprüft ob ein bestimmter Ordner und eine bestimmte Datei vorhanden ist. Falls Ordner und Datei nicht vorhanden sind, dann werden sie entsprechend erstellt.
Außerdem ist eine Listbox auf der Windows Form. In der Listbox werden die zu kopierenden Ordner und Dateien aufgelistet. Am Ende jeder Auflistung erscheinen noch zusätzlich Laufwerksinformationen. Diese Informationenen werden dann noch zusätzlich in eine Datei geschrieben. Das alles funktioniert wunderbar. Wenn ich aber die Zieldatei lösche, dann erhalte ich den folgenden Fehler:

InvalidOperationException

Fehler beim erstellen des Formulars. Weitere Informationen finden Sie in der Exception.InnerException. Fehler: Der Verzeichnisname d:\!test ist ungültig.

Wenn ich den folgenden Code:

Dim QuellPfad As String = "h:\!test"
        Dim Zielpfad As String = "d:\!test"
        Dim Datei As String = "d:\!test\report.txt"
 
        If Not Directory.Exists(Zielpfad) Then
            Directory.CreateDirectory(Zielpfad)
        End If
        If Not File.Exists(Datei) Then
            File.Create(Datei)
        End If
in eine andere Windows Form kopiere, dann lässt sich ohne weiteres der fehlende Ordner anlegen.
Als nächsten Schritt, habe ich den gesamten Code aus der eigentlichen Windows Form bis auf den hier abgebildeten Code auskommentiert und anschließend wieder ausgeführt. Auch so bekomme ich die bereits geschilderte Fehlermeldung (InvalidOperationException). Der Fehler scheint irgendwo in der Windows Form zu liegen.
Ich würde ganz gerne den Fehler finden wollen, hierfür brauche ich eure Hilfe. Ich könnte mir vorstellen, dass man mit dem Debugmodus den Fehler finden könnte. Wie muss ich vorgehen um den Fehler noch weiter einzugrenzen?

Was ich noch nicht gemacht habe ist, alles in eine komplett neue Windows Form zu übernehmen. Diesen Schritt wollte ich erst am Ende ausprobieren, wenn wir den Fehler nicht feststellen können.


Danke schon einmal für Eure Unterstützung.

Gruß
Maik
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: InvalidOperationException 
Autor: Manfred X
Datum: 02.07.12 20:42

Hallo!

Du kannst am Anfang des Codes einen Breakpoint setzen und
schrittweise den Code debuggen.

Zugriffsrechte auf das Laufwerk sind gegeben?
Vielleicht besser so.
   Dim QuellPfad As String = "h:\!test"
   Dim Zielpfad As String = "d:\!test"
   Dim Datei As String = "report.txt"
 
   If Not IO.Directory.Exists(Zielpfad) Then
      IO.Directory.CreateDirectory(Zielpfad)
   End If
 
   If Not IO.File.Exists(IO.Path.Combine(Zielpfad, Datei)) Then
      IO.File.Create(IO.Path.Combine(Zielpfad, Datei))
   End If
Dateisystem-Operationen allgemein besser in einen
Try-Catch-Block packen.

MfG
Manfred

Beitrag wurde zuletzt am 02.07.12 um 20:54:29 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: InvalidOperationException 
Autor: veneror
Datum: 02.07.12 21:32

Hallo Manfred,

Zugriffsrechte auf das LW sind gegeben.
Wenn ich die Dateisystem-Operation in eine andere Windows Form kopiere, dann kann ich ohne Probleme den Ordner + die Datei anlegen. Das funktioniert nur nicht in der eigentlichen Windows Form.

Ich habe es mal in einen Try-Catch >Block gepackt:

Try
            If Not Directory.Exists(Zielpfad) Then
                Directory.CreateDirectory(Zielpfad)
            End If
            If Not File.Exists("d:\!test\report.txt") Then
                File.Create("d:\!test\report.txt")
            End If
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
Die Fehlermeldung ist die Selbe. Ich beschäftige mich erst seit kurzem mit VB, muss ich vielleicht eine andere Message ausgeben lassen?

In der Fehlermeldung kommt gleich als erster Satz, "Fehler beim erstellen des Formulars".

Ich weiss nicht ob es wichtig ist, der Code steht im Load Event von der Windows Form.

Gruß
Maik
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: InvalidOperationException 
Autor: Manfred X
Datum: 02.07.12 21:39

Und was geschieht, wenn Du im Form_Load den Cursor
in die erste Code-Zeile setzt, per <F9> den
Breakpoint dort setzt und nach dem Erreichen des
Breakpoint per <F8> die Anweisung schrittweise weiter laufen läßt.

Wird dieser Breakpoint denn überhaupt erreicht?

MfG
Manfred
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: InvalidOperationException 
Autor: veneror
Datum: 02.07.12 21:58

Hallo Manfred,

durch das Schrittweise weiterlaufen lassen, ist mir gerade eine Unstimmigkeit bei ein paar Variablen aufgefallen. Das werde ich morgen prüfen und mich hier dann melden.

Schon einmal Danke für deine Unterstützung und noch einen angenehmen Abend.


Gruß
Maik
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: InvalidOperationException 
Autor: veneror
Datum: 03.07.12 15:09

Hallo Manfred,

ich habe es wie du es gestern Abend geschrieben hattest noch einmal ausprobiert. Form_Load Breakpoint gesetzt und dann mit F8 schrittweise den Code ausgeführt. Ich habe 4 globale Variablen, sobald ich die Variable

Dim sSrcPath As String = "h:\!test"
verlasse, erscheint die besagte Fehlermeldung: InvalidOperationException wurde nicht behandelt. Fehler: Der Verzeichnisname d:\!test ist ungültig. Wenn ich diese Meldung mit "ok" bestätige springt die F8 Marke wieder zur ersten Variable.

Diese Variable wird benötigt, damit Ordner und Dateien sychronisiert werden. Mein Quell-LW ist h:\ und mein Ziel-LW ist d:\

Ich kann nicht nachvollziehen, wieso sich in der Fehlermeldung auf den Verzeichnisname d:\ bezogen wird.

Gruß
Maik
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: InvalidOperationException 
Autor: Manfred X
Datum: 03.07.12 15:37

Hallo!

In dieser Code-Zeile wird eine LOKALE Variable namens "sSrcPath" erstellt und
die Zeichenfolge "H:\!Test" wird darauf zugewiesen.
Da kann eigentlich keine Ausnahme auftreten.
Falls es im Formular auch eine "globale" Variable dieses Namens gibt, wird diese
Variable innerhalb der Form_Load-Routine nicht erkannt.

Hast Du mal geprüft, ob Deine Laufwerke auch bereit sind für den Zugriff?
Sind das lokale Festplatten? Netzlaufwerke?

Dim dinf As New IO.DriveInfo("D:\")
Dim drivetype As String = dinf.DriveType.ToString
If Not dinf.IsReady Then Stop

Ohne genaue Kenntnis, wie das Formular erstellt wird und welcher Code beim Laden
ausgeführt wird, ist das Phänomen kaum zu beurteilen.

Ich würde solche Dateisystem-Operationen nicht im Load-Event eines Formulars ausführen
lassen (eventuell bereits im rufenden Formular).

MfG
Manfred
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: InvalidOperationException 
Autor: veneror
Datum: 03.07.12 15:55

Ja, die Laufwerke sind beide vorhanden, denn wenn festgestellt wird, dass Ordner + Datei vorhanden sind, dann erscheint auch keine Fehlermeldung. Mein Quell-LW h:\ ist eine ext. HDD und mein Ziel-LW d:\ist eine Partition auf meinem NB.

Hier mal der Code, der in der Form_Load abgespielt wird:

Dim LaufwerkInformationen As New DriveInfo("d:\")
        Dim Laufwerkname As Double
        Dim ReadByte As Int32
 
        'ggf. Backslashes anfügen
        If Not sSrcPath.EndsWith("\") Then sSrcPath &= "\"
        If Not sDestPath.EndsWith("\") Then sDestPath &= "\"
 
        'Durchführung der Syncronisation: 
        Datenbestand_synchronisieren(sSrcPath, sDestPath)
        DeleteFolder_Sync(sSrcPath, sDestPath)
 
        'Speichert Inhalte aus der Listbox
        lstBox_speichern(lstBoxAusgabe, SpeicherortDatei = DateiExists)
 
        Laufwerkname = LaufwerkInformationen.TotalSize / (1024 ^ 3) '& " GB"
 
        If LaufwerkInformationen.IsReady Then
            Dim d As New DriveInfo("d:\")
            ProgressBar1.Maximum = 100
            Dim Prozent As Integer = d.TotalFreeSpace / d.TotalSize * 100
            ProgressBar1.Value = ProgressBar1.Maximum - Prozent
 
            If Prozent > 0 And Prozent < 10 Then
                SetPBarColor(ProgressBar1, PBarColor.Rot)
            ElseIf Prozent > 10 And Prozent < 15 Then
                SetPBarColor(ProgressBar1, PBarColor.Gelb)
            Else
                SetPBarColor(ProgressBar1, PBarColor.Gruen)
            End If
        End If
 
        lblAuslastung.Text = "0%"
 
        With ProgressBar1
            .Value += ReadByte
            lblAuslastung.Text = CStr(CInt(100 * .Value / .Maximum)) & "%"
        End With
 
        btnReportLöschen.Enabled = True
        btnBeenden.Enabled = False
    End Sub
Unter Form 1 ist die besagte Variable "Dim sSrcPath As String = "h:\!test"" sowie eine deklarierte API für die Prozessbar.

Brauchst du noch mehr Informationen?

Gruß
Maik
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: InvalidOperationException 
Autor: Manfred X
Datum: 03.07.12 16:23

Hallo!

Ich schaue da gar nicht mehr durch.

Der Code, bei dem anfangs der Fehler auftrat, taucht hier nicht auf.

Offenbar hast Du den Brechpunkt auf eine global deklarierte Variable
gesetzt und das From_Load-Event wird gar nicht aufgerufen, weil
der Fehler schon vorher auftritt - also vermutlich bereits in der
InitializeComponent-Routine.

Diese Routine (in der Datei <Formularname>.Designer,vb>) wird vom Debugger
standardmäßig nicht angelaufen. Ausgeführt wird sie gewöhnlich vor dem
Ausführen des Form_Load-Codes und nach dem Erstellung der globalen Variablen.

Läßt sich dieses Formular im IDE-Designer öffnen?

Du kannst mal die Zeile <System.Diagnostics.DebuggerStepThrough()>
rausnehmen und einen Brechpunkt am Anfang dieser Routine setzen.
Code-Veränderungen darfst Du hier NICHT vornehmen, sonst geht das
Formular kaputt.

MfG
Manfred
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: InvalidOperationException 
Autor: veneror
Datum: 03.07.12 16:57

Form1.Designer.vb lässt sich öffnen. Ich habe die Zeile <System.Diagnostics.DebuggerStepThrough()> auskommentiert und anschließend mit F9 eine Zeile tiefer den Breakpoint gesetzt. Wenn ich dann F8 drücke, werden alle Variablen aus der Form1.vb durchlaufen und springt dann gleich wieder zu Form1.Designer.vb. Etwas weiter unten beginnt der 'FileSystemWatcher1. Sobald ich im FSW die folgende Zeile

Me.FileSystemWatcher1.Path = "D:\!test"
verlasse, erscheint die bekannte Fehlermeldung. Wenn ich den Pfad im FSW abändere, dann wird entsprechend der Verzeichnisname in der Fehlermeldung angepasst d:\!test --> d:\!!!test


Gruß
Maik
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: InvalidOperationException 
Autor: xirton
Datum: 03.07.12 17:24

Der Fehler liegt an deinem FileSystemWatcher ... der ist nämlich eher da, als der Ordner erstellt wird. Und wenn der FileSystemWatcher auf einen Pfad zeigt, welcher nicht existiert, gibts ne Exception.

Lösung: Erst ordner erstellen, danach den Pfad an den FileSystemWatcher zuweisen!


Grüße

Beitrag wurde zuletzt am 03.07.12 um 17:25:20 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: InvalidOperationException 
Autor: Manfred X
Datum: 03.07.12 17:38

Hallo!

Offenbar hast Du im Designer einen FSW auf die Form gezogen und die
Path-Eigenschaft auf einen nicht vorhandenen Ordner festgelegt.
Gehe in den Designer des Formulars und lösche diesen Eigenschaften-Eintrag
(nicht im Code!!).

Die Eigenschaft darfst Du erst festlegen (in Deinem Code), wenn Du sicher
gestellt hast, dass der Ordner tatsächlich existiert.

Edit: wieder mal zu langsam gewesen

MfG
Manfred

Beitrag wurde zuletzt am 03.07.12 um 17:39:39 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: InvalidOperationException 
Autor: veneror
Datum: 03.07.12 19:02

Hallo Manfred,
Hallo xirton,


genau so war es, ich habe den FSW auf das Formular gezogen. Ich habe im Designer den Pfad gelöscht und im Code

filesystemwatcher.path = "d:\!test"
eingefügt. Jetzt funktioniert es auch wieder. Vielen Dank euch beiden.


Gruß
Maik
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel