Hallo Matthias,
Dein Eintrag ist zwar schon ein paar Tage alt, aber er passt wunderbar zu meinem Problem. Ich bin gezwungen meine VB6 Projekte auf VB.NET umzustellen und stolpere dabei über ein Problem nach dem nächsten. Was in VB6 funktionierte erzeugt mit .NET plötzlich diverse Fehler, die ich nicht zu beheben vermag. Zuerst mein Problem:
Das VB6 Programm war in der Lage Dateiinformationen von nicht geöffneten SE-Dateien in ein Formular einzulesen. Dort konnte man sie editieren und neu abspeichern. Eingelesen wurden die Informationen mit:
Sub Einlesen()
Dim objPropSet As SolidEdgeFileProperties.PropertySets = Nothing
Dim objProp As SolidEdgeFileProperties.Properties = Nothing
Dim lauf, i, msg As Integer
Dim Bezeichnung, Text, Inhalt As String
objPropSet = CreateObject("SolidEdge.FileProperties")
On Error Resume Next
Call objPropSet.Open(Pfad, False)
If Err.Number = False Then
On Error GoTo 0
objProp = objPropSet("custom")
i = objProp.Count - 1
For lauf = 0 To i
Text = objProp.Item(lauf).Name
Inhalt = objProp.Item(lauf).Value
If Text Like "Bezeichnung" Then
Bezeichnung = Inhalt
End If
Next lauf
Else
msg = MsgBox("Fehler beim Dateizugriff!" & Chr(10) & "Die angeforderte Datei ist eventuell bereits geöffnet.", MsgBoxStyle.Critical + MsgBoxStyle.OKOnly, "Fehler")
End If
objPropSet.Close()
objPropSet = Nothing
objProp = Nothing
End Sub
überschrieben wurden die Dateiinfos mit:
Sub Daten_speichern(Bezeichnung As String)
Dim objPropSet As SolidEdgeFileProperties.PropertySets = Nothing
Dim objProp As SolidEdgeFileProperties.Properties = Nothing
objPropSet = CreateObject("SolidEdge.FileProperties")
Call objPropSet.Open(Pfad, False)
objProp = objPropSet("custom")
Call objProp.Add("Bezeichnung", Bezeichnung)
Call objPropSet.Save()
objPropSet = Nothing
objProp = Nothing
End Sub
In beiden Fällen wird die Datei mit "objPropSet.Open(Pfad, False)" mit Lesezugriff geöffnet und alles funktionierte wunderbar, bis .NET auftauchte. Sobald ich jetzt einmal die Datei mit Schreibzugriff eingelesen habe, kann ich sie kein zweites mal einlesen (auch nicht mehr schreibgeschützt) ohne das Programm neu zu starten. Ich erhalte jedes Mal eine Freigabeverletzung ("System.Runtime.InteropServices.COMException"). Problematisch ist auch, dass wenn ich die Datei einmal schreibgeschützt eingelesen habe, ich sie auch nicht mehr mit Schreibzugriff einlesen kann. Somit kann ich mir entweder die Dateiinfos anschauen und nicht editieren, oder ich kann sie setzen, ohne zu wissen, wie sie vorher ausgesehen haben.
Beides ist leider inakzeptabel.
Selbst wenn ich Deine unveränderte Prozedur (Öffnen der Datei mit Schreibzugriff) mit einer Schaltfläche zwei mal hintereinander aufrufe erhalte ich die oben genannte Exception. Ich weiß einfach nicht mehr weiter. Handelt es sich hier etwa um ein Grundlegendes .NET Problem? Vielen Dank für Eure Hilfe!!!
Gruß
Tobias
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP