| |
VB.NET - Ein- und UmsteigerInvalidOperationException | | | 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 | |
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. | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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. | |
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. | |
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 | |
| 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 |
|
|
Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|