| | | Xometry Europe erweitert das Angebot um Vakuumguss und Formpressen, eine Pressemitteilung
|
Autor
|
Thema: Fehler bei My.Computer.FileSystem.MoveFile (2787 mal gelesen)
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 10. Jan. 2013 16:52 <-- editieren / zitieren --> Unities abgeben:
Hi Experten, ich habe da ein VB.NET-Programm, das sich seit langem bewährt...bis auf einen Punkt, der seit einiger Zeit immer wieder auftritt. Das Programm analysiert die Zeichnungs- und Baugruppen-Struktur in SolidWorks und verschiebt dann die Dateien nach bestimmten Regeln in ein anderes Verzeichnis. Wichtig: Vor dem Verschieben werden definitiv alle Dateien in SolidWorks geschlossen! Das Verschieben erfolgt mit
Code: My.Computer.FileSystem.MoveFile(oldFilename, newFilename, _ Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs, _ FileIO.UICancelOption.DoNothing)
In den meisten Fällen funktioniert das auch, aber immer wieder kommt die Meldung, dass die Datei nicht verschoben werden kann weil sie noch in vshost.exe geöffnet ist - manchmal wird als Programmname auch das "Verschiebe"-Programm selbst angegeben:
Der Fehler tritt bei den einen Dateien immer auf, bei anderen überhaupt nicht. Hat vielleicht jemand ne Idee, woran das liegen kann? ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... | Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Ehrenmitglied V.I.P. h.c. Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 10. Jan. 2013 17:43 <-- editieren / zitieren --> Unities abgeben: Nur für KMassler
Hallo Klaus, wenn es das Problem ist, was ich denke, dann ist das eigentlich ganz simple! Du musst etwas warten, denn wenn das Programm weiterläuft, heist es noch nicht, dass die Datei auch wieder freigegeben ist. Das kann sich durchaus schon mal 1-2 Sekunden verzögern. Was passiert denn, wenn du auf wiederholen drückst? Funktioniert es dann? Wenn nicht, dann muss ein Prozess die Datei noch im Zugriff haben. Dass kann ein Vorschaufenster, Explorer, Vierenscanner oder auch Zwischenspeicher sein, der nicht geleert wurde. Evtl. hast du dann innerhalb deines Programmes eine Programm- oder Objektinstanz nicht sauber beendet. ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities >>> ÜBay - Großes CADde Ausrüstungspacket - Ende Fr 01.02.2013 um 12:05Uhr <<< Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Pete Riley Mitglied Student
Beiträge: 171 Registriert: 30.09.2012
|
erstellt am: 10. Jan. 2013 18:05 <-- editieren / zitieren --> Unities abgeben: Nur für KMassler
Eigentlich sieht's doch eher so aus, als hätte Klaus' Programm selbst die Datei noch in der Mangel. Evtl. irgendwas vorher nicht ganz sauber beendet? Vielleicht würde ja ein kleines delay davor schon ausreichen? Gruß, Pete. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Comos User Mitglied
Beiträge: 112 Registriert: 23.03.2010
|
erstellt am: 11. Jan. 2013 08:13 <-- editieren / zitieren --> Unities abgeben: Nur für KMassler
Moin, Ja,ja Fluch und Segen des Garbage Collector. Dieser kümmert sich zwar vorbildlich um die Freigabe nicht genutzter Resourcen aber eben nicht deterministisch. Das heißt es ist nicht vorhersagbar wann die Freigabe erfolgt. Die Explicite Freigabe kann durch aufruf von IDisposable.Dispose erreicht werden. Kugst du hier IDisposable-Schnittstelle Durch Anwendung der Using-Anweisung Anweisung läßt sich das Thema auf einfache Weise behandeln Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 11. Jan. 2013 08:19 <-- editieren / zitieren --> Unities abgeben:
Hallo Rick & Pete, vielen Dank für die Hinweise, aber ich denke, die kann ich beide verneinen. @Rick: Es funktioniert auch nach langer Wartezeit nicht, d.h, die Datei ist auch nach mehreren Minuten nicht freigegeben. So etwas hatte ich auch schon vermutet, bringt mich aber nicht weiter. Die Datei ist in keinem sichtbaren Prozess geöffnet, auch keine Vorschau im Explorer etc., auch wenn ich SWX dabei beende, bringt das nichts. Auch der angezeigte Prozess vshost.exe ist nirgendwo aktiv. @Pete: Das Programm selbst hat diese SolidWorks-Dateien zu diesem Zeitpunkt eigentlich überhaupt nicht geöffnet. Der einzige Zugriff auf die Dateien besteht darin, dass zu Beginn des Programms die Struktur mit den bekannten Travers-Mechanismen untersucht wird, Dateieigenschaften ausgelesen werden etc.. Damit sind sie aber nicht im Programm geöffnet. Vor dem "MoveFile"-Befehl werden alle Dateien in SolidWorks geschlossen. Wie gesagt hilft auch ein komplettes Schließen von SWX nix. Seltsam ist ja, dass das Problem nur bei manchen Dateien auftritt- bei diesen aber immer. Ich teste gerade mit einem einzelnen Part und der dazu gehörenden Zeichnung. In anderen, viel komplexeren Fällen mit vielen Zeichnungen, Baugruppen und Parts läuft das in der Regel problemlos durch- oder steigt nur bei einzelnen Parts aus. Hmm... beim Kompilieren wird immer eine Datei <Programmname>.vshost.exe erzeugt....ob die was damit zu tun hat? Und wenn, wie hilft mir das weiter? [Edit] Ah hallo Peter, dein Beitrag kam gerade zeitgleich mit meiner Antwort. Also..das übersteigt meinen Horizont. Wie kann ich eine Resource freigeben, die ich gar nicht belegt habe? Bzw. wie kann ich das nutzen im Zusammenhang mit dem einfachen My.Computer.FileSystem.MoveFile...-Befehl? ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... | [Diese Nachricht wurde von KMassler am 11. Jan. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Comos User Mitglied
Beiträge: 112 Registriert: 23.03.2010
|
erstellt am: 11. Jan. 2013 09:09 <-- editieren / zitieren --> Unities abgeben: Nur für KMassler
Moin, Zitat: Hmm... beim Kompilieren wird immer eine Datei <Programmname>.vshost.exe erzeugt....ob die was damit zu tun hat? Und wenn, wie hilft mir das weiter?
Lass mich das für dich googeln 1.Treffer da steht auch wie mann das abstellt. nun zum Thema:
Zitat: Das Programm analysiert die Zeichnungs- und Baugruppen-Struktur in SolidWorks
diese Aussage ließ mich vermuten, dass die Dateien irgentwann vorher geöffnet wurden, ergo es wurde ein Streamobject auf diese Datei erzeugt. Nun ist es so das ein Close auf das Stream Object die Resource nicht (sofort) freigibt, sondern erst wenn der 'Garbage Collector Zeit hatt'. Um eine sofortige Freigabe zu erreichen muß man halt die .Dispose Methode (des Streamobjectes) aufrufen, oder aber die Using Anweisung benutzen (es passiert implizit das selbe). Mit der Move Methode hatt das wenig zu tun, die braucht halt Vollzugriff auf die Quelldatei und der könnte ebend durch eine (noch) nicht beendete Bindung an ein Streamobject blockiert sein. Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 14. Jan. 2013 11:45 <-- editieren / zitieren --> Unities abgeben:
Danke, das hatte ich auch schon gegoogelt (das kann ich wenigstens), aber das hilft mir nicht weiter. wie es aussieht, übersteigt das ganze meinen beschränkten Programmier-Horzont. Ich habe meines Wissens kein Streamobjekt in Verwendung, ich streame keine Dateien, weder lesend noch schreibend. Ich verwende die bekannten, in der SolidWorks-API-Hilfe und Examples beschriebenen Methoden, um SolidWorks-Strukturen von geöffneten SolidWorks-Dateien herauszufinden (Stichwort Traversieren). Ich wüsste nicht, wie ich da irgendwo die eine Dispose-Methode einsetzen könnte- sldworks.DrawingDoc, sldworks.ModelDoc2 besitzen keine Dispose-Methode. Das Oberseltsamste ist ja, dass es nur bei einzelnen Dateien auftritt, bei den meisten überhaupt nicht. Aber immer bei den selben. ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... | Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|