Die Arbeit mit Dateien und Pfaden ist in iLogic ein leichtes Spiel. Es stehen diverse vordefinierte Snippets bereit. Zusätzlich kann auch die gesamte Bandbreite an Funktionen des Namespace System.IO aus VB.NET genutzt werden.
Als Beispiel dient eine in Inventor geöffnete Datei mit dem Namen LST_Bender.ipt. Anhand dieser Datei werden die beiden unterschiedlichen Herangehensweisen erläutert.
iLogic Snippets
iLogic stellt vordefinierte Snippets bereit, die den Umgang mit Dateien und Pfaden spielerisch leicht gestalten. Die Snippets sind in der Dokumentation in der Sektion Document Functions Reference gelistet. Zur Verfügung stehen:
| Snippet | Funktionsweise |
|---|---|
ThisDoc.FileName(False) |
Liefert den Dateinamen ohne Dateiendung. |
ThisDoc.FileName(True) |
Liefert den Dateinamen mit Dateiendung. |
ThisDoc.Path |
Liefert den Dateipfad, in dem die Datei abgelegt ist. |
ThisDoc.PathAndFileName(False) |
Liefert einen absoluten Pfad, inkl. Dateiname, jedoch ohne Dateiendung. |
ThisDoc.PathAndFileName(True) |
Liefert einen absoluten Pfad, inkl. Dateiname und Dateiendung. |
Die zurückgelieferten Werte können einfach im iLogic Logger betrachtet werden:
Logger.Info(ThisDoc.FileName(False))
Logger.Info(ThisDoc.FileName(True))
Logger.Info(ThisDoc.Path)
Logger.Info(ThisDoc.PathAndFileName(False))
Logger.Info(ThisDoc.PathAndFileName(True))
Das Resultat:
System.IO.Path
Die eingebauten iLogic Snippets können in VB.NET auch identisch über die Klasse System.IO.Path ermittelt werden. Die Klasse bietet zusätzlich noch deutlich mehr Funktionen, bspw. das erfragen der Dateiendung.
Genutzt wird das Property FullFileName, das letzten Endes dem iLogic Snippet ThisDoc.PathAndFileName(True) entspricht und eine absolute Pfadangabe als String liefert:
Der folgende Code liefert den identischen Logger Output, wie im Beispiel der iLogic Snippets:
Dim sFullFileName As String = ThisDoc.Document.FullFileName
Logger.Info(System.IO.Path.GetFileNameWithoutExtension(sFullFileName))
Logger.Info(System.IO.Path.GetFileName(sFullFileName))
Logger.Info(System.IO.Path.GetDirectoryName(sFullFileName))
Logger.Info(System.IO.Path.Combine(System.IO.Path.GetDirectoryName(sFullFileName), System.IO.Path.GetFileNameWithoutExtension(sFullFileName)))
Logger.Info(System.IO.Path.GetFullPath(sFullFileName))
Für das iLogic Snippet ThisDoc.PathAndFileName(False) steht keine native VB.NET-Methode zur Verfügung. Das gewünschte Ergebnis kann aber mittel der Methode Path.Combine erzielt werden.
Anwendungsfall
Ein naheliegender Anwendungsfall in größeren Baugruppen ist die Prüfung, ob alle verbauten Komponenten in den korrekten Ablagepfaden - bspw. der Ordnerstruktur in Vault - abgelegt sind. Da die Pfadangaben Strings sind, kann einfach mit der Methode String.Contains geprüft werden, ob der gewünschte Ablagepfad identisch mit dem realen Ablagepfad der aktiven Datei ist.
Das folgende Beispiel prüft, ob der FullFileName die Pfadangabe C:\Users\horst\Documents\Inventor\ enthält:
Dim sFullFileName As String = ThisDoc.Document.FullFileName
If sFullFileName.Contains("C:\Users\horst\Documents\Inventor\") Then
Logger.Info("Der Pfad der Datei '{0}' ist korrekt.", System.IO.Path.GetFileName(sFullFileName))
Else
Logger.Warn("Der Pfad der Datei '{0}' ist nicht korrekt.", System.IO.Path.GetFileName(sFullFileName))
End If
Eine solche Prüfung kann auch über alle verbauten Komponenten einer Baugruppe erfolgen. Dazu muss die If-Else-Schleife nur auf die AllReferencedDocuments angewendet werden. Mehr zu diesem Thema ist im vorangegangen Post iLogic: Referenzierte Dokumente in Baugruppen zu finden.