Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  VBasic / vb.net / vbs / wsh
  Fehler bei My.Computer.FileSystem.MoveFile

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Fehler bei My.Computer.FileSystem.MoveFile (2732 mal gelesen)
KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles...



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2657
Registriert: 06.11.2000

SolidWorks Start 1999
** CSWP 01/2008 **
Dell Precision 7540 mobile Workstation,
64GB, Quadro RTX 3000;
SWX2020 SP5;
SAP/PLM+ECTR;
DriveWorks Pro;
Programmierung: VBA, aktuell Visual Studio 2017/VB.Net

erstellt am: 10. Jan. 2013 16:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


movetofehler.png

 
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



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Pete Riley an!   Senden Sie eine Private Message an Pete Riley  Schreiben Sie einen Gästebucheintrag für Pete Riley

Beiträge: 171
Registriert: 30.09.2012

erstellt am: 10. Jan. 2013 18:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Comos User an!   Senden Sie eine Private Message an Comos User  Schreiben Sie einen Gästebucheintrag für Comos User

Beiträge: 112
Registriert: 23.03.2010

erstellt am: 11. Jan. 2013 08:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

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...



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2657
Registriert: 06.11.2000

SolidWorks Start 1999
** CSWP 01/2008 **
Dell Precision 7540 mobile Workstation,
64GB, Quadro RTX 3000;
SWX2020 SP5;
SAP/PLM+ECTR;
DriveWorks Pro;
Programmierung: VBA, aktuell Visual Studio 2017/VB.Net

erstellt am: 11. Jan. 2013 08:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von Comos User an!   Senden Sie eine Private Message an Comos User  Schreiben Sie einen Gästebucheintrag für Comos User

Beiträge: 112
Registriert: 23.03.2010

erstellt am: 11. Jan. 2013 09:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich


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...



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2657
Registriert: 06.11.2000

SolidWorks Start 1999
** CSWP 01/2008 **
Dell Precision 7540 mobile Workstation,
64GB, Quadro RTX 3000;
SWX2020 SP5;
SAP/PLM+ECTR;
DriveWorks Pro;
Programmierung: VBA, aktuell Visual Studio 2017/VB.Net

erstellt am: 14. Jan. 2013 11:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz