| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Fehler in FileManager.CopyFile-Funktion von Inventor API?! (4554 mal gelesen)
|
Gerundt Mitglied Administrator
Beiträge: 19 Registriert: 15.03.2005 AutoCAD Mechanical 2005/2009 Autodesk Inventor 2009
|
erstellt am: 24. Feb. 2009 14:38 <-- editieren / zitieren --> Unities abgeben:
Liebes Forum, uns ist hier auf der Arbeit ein Fehler in der „FileManager.CopyFile“-Funktion der Inventor API aufgefallen: Zitat: Wenn die Quelldatei das „Schreibgeschützt“-Attribut gesetzt hat, stürzt die Funktion mit dem Fehler „Unbekannter Fehler (Ausnahme von HRESULT: 0x80004005 (E_FAIL))“ unter Visual Basic 2005 ab. Wir haben den Fehler sowohl unter Windows XP Professional, also auch Vista Business. Außerdem tritt das Problem unter Visual Basic 6 auf und mit Inventor 2008 und Inventor 2009.
Hier ist ein Beispiel-Quelltext für Visual Basic 2005:
Code: Dim oApprenticeServer As New Inventor.ApprenticeServerComponent'oApprenticeServer.FileManager.CopyFile("Z:\docs\public\881951\02\881951_02.iam", "C:\881951_02.iam") Try oApprenticeServer.FileManager.CopyFile("C:\quelle.idw", "C:\ziel.idw") Catch ex As Exception Debug.Print(ex.Message) Debug.Print(ex.StackTrace) End Try
Hier die entsprechende Fehlermeldung: Zitat: Eine Ausnahme (erste Chance) des Typs "System.Runtime.InteropServices.COMException" ist in mscorlib.dll aufgetreten. Falscher Parameter. bei System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) bei Inventor.FileManager.CopyFile(String SourceFullFileName, String DestinationFullFileName, FileManagementEnum FileManagementOption) bei InventorTest.Form1.Form1_Load(Object sender, EventArgs e) in C:\Dokumente und Einstellungen\...\InventorTest\Form1.vb:Zeile 9.
Könnt Ihr uns bei unserem Problem helfen? Gibt es einen Trick, wie wir die „FileManager.CopyFile“-Funktion trotz „Schreibschutz“-Attribut der Quelldatei verwenden können? Mit freundlichen Grüßen, Tim Gerundt Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 24. Feb. 2009 14:58 <-- editieren / zitieren --> Unities abgeben: Nur für Gerundt
Hallo Tim, die VB Unsitte verbreitet sich in .NET leider auch. Mit C# wärst du genötigt auch den dritten Parameter zu berücksichtigen, und da unter Umständen auch kOverwriteReadOnlyFile zu übergeben. Ein Auszug aus der Hilfedatei: Code:
Description Method that copies the specified Autodesk Inventor file (.ipt, .idw, .ipt etc.) from one location to another. Syntax Public Sub CopyFile( _ ByVal SourceFullFileName As String, _ ByVal DestinationFullFileName As String, _ Optional ByVal FileManagementOption As FileManagementEnum = kNoForceFile _ ) Parameters SourceFullFileName Input String that specifies the full path and filename of the file to copy. DestinationFullFileName Input String that specifies the full path and filename in which to place the results of the copy procedure. FileManagementOption Member Value Description kNoForceFile Force option not specified. 0 kForceFile Option to force the deletion if the file is reserved. 1 kOverwriteExistingFile Option to overwrite the existing file at the destination. 32 kOverwriteReservedFile Option to overwrite the existing file at the destination even if reserved. 64 kOverwriteReadOnlyFile Option to overwrite the existing read-only file at the destination 128 kCopyFileMask Option used by CopyFile. 224 kDeleteFileMask Option used by DeleteFile. 1 kMoveFileMask Option used by MoveFile. 225 Input constant that specifies how to handle the results of the file operation.
------------------ Grüße Igor FX64 Software Solutions - Inventor Tools Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Gerundt Mitglied Administrator
Beiträge: 19 Registriert: 15.03.2005 AutoCAD Mechanical 2005/2009 Autodesk Inventor 2009
|
erstellt am: 24. Feb. 2009 15:22 <-- editieren / zitieren --> Unities abgeben:
Den Parameter kOverwriteReadOnlyFile hatte ich schon ausprobiert. Hilft aber leider nicht, wenn die Quelldatei "schreibgeschützt" ist. Jedenfalls bei den 2 Testrechnern, mit den ich es getestet habe. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 24. Feb. 2009 15:32 <-- editieren / zitieren --> Unities abgeben: Nur für Gerundt
|
Gerundt Mitglied Administrator
Beiträge: 19 Registriert: 15.03.2005 AutoCAD Mechanical 2005/2009 Autodesk Inventor 2009
|
erstellt am: 24. Feb. 2009 15:40 <-- editieren / zitieren --> Unities abgeben:
Die Dateirechte sind nicht das Problem. Ich habe das ganze lokal auf der Festplatte als Administrator ausgeführt. Und sobald ich das Attribut "Schreibgeschützt" von der Quelldatei nehme, klappt es ohne Probleme. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 24. Feb. 2009 15:53 <-- editieren / zitieren --> Unities abgeben: Nur für Gerundt
|
Gerundt Mitglied Administrator
Beiträge: 19 Registriert: 15.03.2005 AutoCAD Mechanical 2005/2009 Autodesk Inventor 2009
|
erstellt am: 24. Feb. 2009 16:12 <-- editieren / zitieren --> Unities abgeben:
Leider muss das Schreibschutz-Attribut bei der Quelldatei gesetzt bleiben. Später soll das Programm von jemanden benutzt werden, der auch auf Dateiebene nur Leserechte hat. Sprich er könnte das Schreibschutz-Attribut gar nicht löschen. Für mich sieht es nach einem Fehler in der Inventor API aus. Die Datei wird kopiert (inklusive Schreibschutz-Attribut) und dann stürzt der Befehl ab. Eigentlich müsste jetzt der kOverwriteReadOnlyFile Parameter greifen, aber das tut er leider nicht. Jetzt könnte ich unter VB.net vielleicht den Fehler abfangen, schliesslich kopiert er die Datei, aber sauber ist das nicht! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 24. Feb. 2009 16:21 <-- editieren / zitieren --> Unities abgeben: Nur für Gerundt
Zitat: Original erstellt von Gerundt: Leider muss das Schreibschutz-Attribut bei der Quelldatei gesetzt bleiben.
Oder wieder gesetzt werden? Code:
File.SetAttributes("C:\\quelle.idw", FileAttributes.Normal); oApprenticeServer.FileManager.CopyFile("C:\\quelle.idw", "C:\\ziel.idw") File.SetAttributes("C:\\quelle.idw", FileAttributes.ReadOnly);
Zitat: Original erstellt von Gerundt: Für mich sieht es nach einem Fehler in der Inventor API aus.
Kann ich jetzt leider nicht testen, aber leicht möglich. ------------------ Grüße Igor FX64 Software Solutions - Inventor Tools Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Gerundt Mitglied Administrator
Beiträge: 19 Registriert: 15.03.2005 AutoCAD Mechanical 2005/2009 Autodesk Inventor 2009
|
erstellt am: 24. Feb. 2009 16:59 <-- editieren / zitieren --> Unities abgeben:
Zitat: Oder wieder gesetzt werden?
Bei mir als Admin würde es klappen, aber hinterher soll das Programm von Benutzer ausgeführt werden, die zur Sicherheit nur Leseberechtigung (auf Dateisystemebene) auf die Dateien haben. Sie könnten also auch über den Explorer nicht das "Schreibgeschützt"-Attribut setzen oder löschen. Wenn ich die FileCopy-Funktion vom normalen Windows-FileSystemObject verwende, habe ich keine Probleme mit Quelldateien, die das Schreibgeschützt-Attribut haben. Die Datei wird ohne Absturz kopiert. Bei Inventor-Dateien würde ich dann aber Probleme mit den Referenzen bekommen und bin deswegen auf die Inventor-Funktion angewiesen. Danke auf jeden Fall schon mal für deine Mühen! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |