| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co. | | |  | Qualität sichtbar gemacht, dank leistungsfähiger 3DViewStation Grafik, eine Pressemitteilung
|
Autor
|
Thema: Zugriff auf temporäre CGRs im Cache mit Pfad > 259 Zeichen (2145 mal gelesen)
|
tomtom1972 Mitglied dipl ing maschinenbau
  
 Beiträge: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 29. Aug. 2008 06:50 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, ich kopiere temporäre cgr-Dateien, welche CATIA beim Arbeiten im CACHE-Mode automatisch im Cache-Verzeichnis anlegt per Script in andere Ordner. Dabei tritt bei großen Verschachtelungstiefen der Ordner (in welchen die original Modelle: .CATParts, .models .etc) abgelegt sind, folgendes Problem auf: Im Cache-Verzeichnis "baut" Catia die Ordner-Struktur selbstständig nach, d.h. das temporäre CGR eines Parts welches z.B. im Ordner \Projekt\Oem\Test\Beispiel\123 abgelegt ist findet sich in C:\Temp\CATCache\cgr\#13\Projekt\Oem\Test\Beispiel\123 wieder. Wenn zudem der Laufwerksbuchstabe (hier: Z) einem speziellen Ordner auf einem Server entspricht, so wird das auch noch in die Struktur integriert, also z.B. C:\Temp\CATCache\cgr\Servername\dfs\RedirectedFolders\Username\#13\Projekt\Oem\Test\Beispiel\123 Auch der Name des temporären cgrs wird (im vergleich zum org. Part) um einiges länger,aus Test.CATPart z.B. wird Test.CATPart.2008-08-11-13.04.06.cgr Ist nun der absolute Pfad eines CATParts schon recht lang (z.B. 240 Zeichen), so steigt er für die temporären cgrs in den vorliegenden Fällen auf über 260 Zeichen an (280-290) Will ich in VB6 auf die Files zugreifen (die teporären cgrs in der Cache Struktur) mit Code: Set oFS = CreateObject("Scripting.FileSystemObject") Set oFile = oFS.GetFile(Path)
so tritt ein Error (Err.Number 53) auf: Datei kann nicht gefunden werden / existiert nicht. Der Grenzwert für die Zeichenlänge des Pfades scheint bei 259 Zeichen zu liegen, d.h. ab dem 260sten tritt der Error auf. Die sich im CACHE befindlichen Dateien können im Windows Explorer (oder TotalCommander oder sonst was) werder kopiert, gelöscht, umbenannt noch sonst was werden. Nun zu meiner eigentlichen Frage: Kann ich die Dateien noch irgendwie (in VB) kopieren? Wenn ja, wie? Z.B. einen teil des Pfades duch eine Umgebungsvariable ersetzen (oder so was in der Art)? Und: Wieso kann CATIA die Dinger überhaupt anlegen? Ich hoffe irgendjemand hat einen Info für mich. Dieser Post findet sich auch im VB-Forum. Gruss & einen schönen Tag TomTom ------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
   
 Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 29. Aug. 2008 07:28 <-- editieren / zitieren --> Unities abgeben:          Nur für tomtom1972
Hallo TomTom, eine wirklich sehr gute Frage, deren Lösung mich auch interessieren würde. Schon versucht das ganze in Teilstrings zu zerlegen und diese dann zu übergeben? Bzw. jeden Folder einzeln zu holen und dann in seinen File-Objekten das gewünschte raus zu ziehen? Weil wenn du die Folder Struktur durchgehst musst du ja nur dne String des nächsten Folders übergeben... Vielleicht hilft's ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 29. Aug. 2008 08:00 <-- editieren / zitieren --> Unities abgeben:          Nur für tomtom1972
Servus AFAIK  kann man in Windows (zumindest bei NTFS Partitionen) auch einem Ordner ein Laufwerksbuchstaben zuweisen. So könntest du den Pfad kürzen und somit unter die 259 Zeichen kommen. Gruß Bernd PS: Das Arbeiten mit einer Umgebungsvariable hört sich auch vielversprechend an ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
  
 Beiträge: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 29. Aug. 2008 08:02 <-- editieren / zitieren --> Unities abgeben:         
Hallo HoBLila, danke für deine Antwort. Hilft aber nix. Deinen Vorschlag habe ich schon versucht. Es gibt auch noch den ShortPath, d.h. die verkürzte (DOS) Schreibweise für den absoluten Pafd (LongPath). Über den gehts auch nicht. Eine Idee war wie gesagt noch der Aufruf der Datei über eine Umegbungsvariable, sprich einen Teil des Pfades ersetzen. Also z.B. eine Variable erzeugen: cPATHPart und ihr den Wert mitgeben (aus obrigem Bsp.): C:\Temp\CATCache\cgr\Servername\dfs\RedirectedFolders\Username und dann aufrufen über cPATHPart\#13\Projekt\Oem\Test\Beispiel\123\Test.CATPart.2008-08-11-13.04.06.cgr. Das bekomme ich aber nicht hin, da der Path (des Files) dann doch wieder der komplette String ist. Auch das ist noch ein Ansatz: Wenn ich in einer DOS-Shell (Eingabeaufforderung) mit Subst einen ganzen Pfad-Abschnitt durch einen Laufwerksbuchstaben ersetzte, also z.B. Subst N: C:\Temp\CATCache\cgr\Servername\dfs\RedirectedFolders\Username dann kann ich die Dateien wieder ganz normal bearbeiten. Der Path des File.Objects fängt ist dann auch nur N:\... Ob ich das in VB "fliegend" hinbekomme, also für jede Datei einzeln (rekursiv) bei Zeichenlänge Pfad > 259 einen Teil des Pfades durch Subst ersetzten, die Datei wegkopieren, dann das Laufwerk wieder löschen etc. weiss ich noch nicht. Falls ich eine Lösung finde, poste ich sie hier. EDIT: Genau, bgrittmann. Du warst schneller. Danke und Gruss TomTom
------------------ tomtom1972
[Diese Nachricht wurde von tomtom1972 am 29. Aug. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 29. Aug. 2008 08:09 <-- editieren / zitieren --> Unities abgeben:          Nur für tomtom1972
|
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin

 Beiträge: 2862 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2008 Plateia, Canalis Visual Basic
|
erstellt am: 29. Aug. 2008 16:01 <-- editieren / zitieren --> Unities abgeben:          Nur für tomtom1972
Hallo TomTom, Zitat: ich kopiere temporäre cgr-Dateien, ... per Script in andere Ordner.
Warum? Datensicherung? Freigeben von Speicherplatz? In der c't gab's da mal ein geniales Backup Programm, welches auch für Versionsarchivierung verwendet werden kann. So weit ich mich erinnere wurden Benutzer/Ersteller und Ursprungspfad als Zusatzinformationen mitgespeichert. Einstellbar war auf ein "Verfallsdatum", sprich: Wie lange sollen die Daten vor dem entgültigem Löschen behalten werden. Wenn es das ist was Du vor hast könnte ich mich mal auf die Suche machen, oder einer der Forumsteilnehmer hat es im Einsatz und kanns Dir weitergeben. Zum Thema Subst: Hilft Dir ein "Netzlaufwerk verbinden" nicht auch weiter? Grüße, Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
  
 Beiträge: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 01. Sep. 2008 06:10 <-- editieren / zitieren --> Unities abgeben:         
Hallo KlaK, danke für deine Antwort. Mein Problem beschränkt sich rein darauf, wie o.b. die Dateien zu kopieren. Warum? Ich erzeuge von (großen) nativen V5-Strukturen CGR-Strukturen (in etwas wie SaveAsFrozen im DMU). Und der einfachste (weil schnellste Weg und ohne DMU Lizenz) ist das rekursive kopieren (.SaveAs) der CATProducts der kompletten Struktur. Für alles andere (was Geometrie enthält, wie .CATParts, V4-models, cgrs oder sonstiger Schrott) erzeugt CATIA (im CACHE Mode) eigenständig temporäre CGR-Dateien, die ich aus den entsprechenden Verzeichnissen wegkopiere, umbenenne und gegen die Originale in der Struktur Replace. Ich habe so (was z.B. die Benennung betrifft) viel mehr Möglichkeiten als beim SaveAsFrozen oder einigen anderen Workarounds. Und da ist dann eben in einem Fall bei extremen Verschachtelungstiefen o.g. Problem aufgetreten. Die Vorgehensweise mit "SUBST" ist die Lösung des Problems und funktioniert ausgezeichnet. Wenn ich fertig bin stelle ich die Code Zeilen hier ein. Danke auch noch mal an HoBLila und bgrittmann. Gruss TomTom ------------------ tomtom1972 [Diese Nachricht wurde von tomtom1972 am 01. Sep. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
  
 Beiträge: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 09. Sep. 2008 12:54 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, hier wie versprochen die Lösung des o.s. Problems: '--- sFile: Absoluter Pfad der betroffenen Datei If Len(sFile) > 259 Then Dim p As Integer p = 0 Dim sSubstFile As String aFile = Split(sFile, "\") '--- Struktur zerlegen sSubstFile = aFile(0) Do '--- Pfad wieder zusammenbauen, bis String > 30 Zeichen p = p + 1 sSubstFile = sSubstFile & "\" & aFile(p) Loop Until Len(sSubstFile) > 30 Dim q As Integer Dim sRestFile As String '--- der Rest des Pfades sRestFile = aFile(p + 1) For q = p + 2 To UBound(aFile) sRestFile = sRestFile & "\" & aFile(q) Next sSubstFile = FUNC_SUBST(True, sSubstFile) '--- Laufwerk erzeugen & Subst Start = Timer '--- Pause (das Script ist schneller als die Shell) Do While Timer < Start + 2 DoEvents Loop SUB_CopyFile sSubstFile & ":\" & sRestFile sSubstFile = FUNC_SUBST(False, sSubstFile) '--- Laufwerk wieder löschen Start = Timer '--- Pause Do While Timer < Start + 2 DoEvents Loop End if Sub SUB_CopyFile(sFile) Set oFile = oFileSystem.GetFile(sFile) '--- oTargetFolder & "\" & sNewName: wo auch immer es unter welchem Namen hin soll oFileSystem.CopyFile oFile, oTargetFolder & "\" & sNewName End Sub Function FUNC_SUBST(bSubstOrDel As Boolean, sPathToSubst As String) As String If bSubstOrDel = True Then '--- true = Laufwerk erzeugen & Subst Set oFS = CreateObject("Scripting.FileSystemObject") For i = 65 To 90 '--- Die Buchstaben A-Z entsprechen den Ascii-Code-Zeichen 65-90 If oFS.DriveExists(Chr(i)) = False Then '--- Laufwerksbuchstabe nich nicht vorhanden Exit For End If Next If i > 90 Then '--- kein Laufwerksbuchstabe mehr verfuegbar MsgBox " Abbruch. ", 16, "Kein Laufwerksbuchstabe mehr verfuegbar" End End If Shell "Subst " & Chr(i) & ": " & sPathToSubst '--- über eine Shell mittels SUBST einem Laufwerk eine Odrnerstruktur zuweisen FUNC_SUBST = Chr(i) Else Shell "Subst " & sPathToSubst & ": /d" '--- false = Laufwerk löschen End If End Function ------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |