FileSystemオブジェクト|CATIAマクロの作成方法
このページでは「FileSystemオブジェクト」について解説していきます。
このオブジェクトを使うことで任意の場所にフォルダやファイルを作成することができます。
CATIA内での操作というよりは、よくデスクトップ上などでやるような操作を行うことが出来ます。
今回学べる内容は以下のとおりです。
FileSystemオブジェクトとは
マクロで任意の場所に”新規フォルダ”を作成する方法
マクロで任意の場所に”新規ファイル”を作成する方法
CATIAのオブジェクトを理解するには前提として『Infrastructure Automation Objects』について理解している必要があります。
『Infrastructure Automation Objects』が何を意味しているのか分からない方は、まず『オブジェクトとコレクション/プロパティとメソッドとは 』を先に読むことをオススメします。
FileSystemオブジェクトとは
FileSystemオブジェクトとはフォルダやファイルを扱うことのできるオブジェクトです。
このオブジェクトを使うことで任意の場所にフォルダやファイルを作成することができます。
これによりCATIA内で扱っているデータを書き出したテキストファイルを作成したり、それを保存するためのフォルダを作成することができます。
FileSystemオブジェクトは以下のとおり『Application』の直下のオブジェクトです。
そのため[Application]オブジェクトの[FileSystem]プロパティを使って以下のように書くことでFileSystemオブジェクトを定義することができます。
※このオブジェクトはAs FileSystemとは書かずにVariant型として宣言します。
Dim FileSys ‘As FileSystem
Set FileSys = CATIA.FileSystem
この構文により、「フォルダやファイルに関する操作」を扱うことのできる変数『FileSys』を定義することができます。(変数名は好きに変えてもらって構いません)
あとはこの変数FileSysに対してプロパティとメソッドを使い、さまざまな操作を行っていきます。
FileSystemオブジェクトにはかなり多くのプロパティとメソッドがあるため、代表的なものを抜粋すると以下のようなものがあります。(※メソッドはこれで全種類です)
プロパティ名 | プロパティ内容 |
FileSeparator | パス区切り文字を取得 |
メソッド名 | メソッド内容 |
CopyFile | ファイルを任意の場所に複製する |
CopyFolder | フォルダを任意の場所に複製する |
CreateFile | 新規ファイルを作成する |
CreateFolder | 新規フォルダを作成する |
DeleteFile | 任意のファイルを削除する |
DeleteFolder | 任意のフォルダを削除する |
FileExists | 任意のファイルの存在を確認する |
FolderExists | 任意のフォルダの存在を確認する |
GetFile | 任意のファイルを取得する |
GetFolder | 任意のフォルダを取得する |
『パス』とは簡単にいえばファイルやフォルダの住所のようなものです。
たとえば以下のような円マーク[\]で区切られた文字列を見たことがあると思います。
“C:\Users\ユーザー名\Desktop\VBAProject1.catvba”
これは「VBAProject1.catvba」というファイルの保存場所を表しています。
このようなファイル/フォルダの保存場所を表した文字列のことを「パス」と呼びます。
任意のファイルのパスを取得するには、そのファイル/フォルダをエクスプローラー上で選択し、[ホーム]タブの[パスをコピー]をクリックするだけです。(Windows10)
この「パス」というものを理解していないと、このオブジェクトの使い方が理解できないのでここでしっかりと理解しておきましょう。(上記のような簡単な内容さえ分かっていれば大丈夫です)
プロパティ
FileSystemオブジェクトのプロパティでは「パス」に使われている文字を取得することができます。
FileSystemオブジェクトには、はじめに出てきた[FileSeparator]プロパティのほかに、[PathSeparator]プロパティと[TemporaryDirectory]プロパティがあります。
ただ、これら3つのプロパティはあまり使わないものなので、ここでは代表して[FileSeparator]プロパティのみを紹介していきます。
FileSeparatorプロパティ
FileSeparatorプロパティはパスの区切り文字を取得することができます。
パスの区切り文字を取得するには以下のように書きます。
Dim FilSep As String
FilSep = FileSys.FileSeparator
パスの区切り文字とはWindowsでいう円マーク[\]のことです。
注意しないといけないのは、この区切り文字はOSによって違うということです。
Windows以外のOSでは円マーク[\]が使えないものもあるので、パスは各OSにあった書き方をする必要があります。
たとえば以下のように円マーク[\]を使わずにパスを書くこともできます。
“C:\Users\ユーザー名\Desktop”
↓
“C:” & FilSep & “Users” & FilSep & “ユーザー名” & FilSep & “Desktop”
パスも通常の文字列のように扱うので固有名詞部分はダブルクォーテーション[“]で囲い、アンパサンド[&]を使って変数とつなげて表すことが出来ます。
上記のコードの場合、区切り文字が円マーク[\]でないOSにも対応することができます。(区切り文字が円マーク[\]でないOSはCドライブ(C:)自体が無いと思いますが)
メソッド
FileSystemオブジェクトのメソッドでは主にファイル/フォルダの作成、コピー、削除ができます。
そのほかにも既存のファイル/フォルダの存在を確認したり、パスを取得したりすることができます。
CopyFileメソッド
CopyFileメソッドはその名のとおりファイルの複製をすることが出来ます。
CopyFileメソッドでファイルを複製するには以下のように書きます
Dim CopyFil As File
Set CopyFil = FileSys.CopyFile (PathA , PathB , iBoolean)
PathAにはコピーするファイルのパスを入力、
PathBにはコピーしたファイルを貼り付けた後のパスを入力します。
iBooleanには「False」もしくは「True」を入力します。
ここでは貼り付け先に同じ名前のファイルがあった場合にどうするかを指定します。
Falseの場合 → 上書きしない(=何も処理をしない)
Trueの場合 → 上書きする
たとえばデスクトップ上にある「FILE1.txt」というファイルを、デスクトップ上の「Test」フォルダの中にコピーしたい場合は以下のように書きます。
Dim CopyFil As File
Set CopyFil = FileSys.CopyFile (“C:\Users\ユーザー名\Desktop\FILE1.txt” , “C:\Users\ユーザー名\Desktop\Test\FILE2.txt”, False)
PathBには貼り付け後のパス、つまりはコピーで作られたファイルの名前も入力する必要があります。
上記のコードの場合は、複製されたファイルの名称は「FILE2.txt」となります。
そしてこの「FILE2.txt」に対して操作を行いたい場合には変数CopyFilを使います。
CopyFolderメソッド
CopyFolderメソッドはその名のとおりフォルダの複製をすることが出来ます。
このメソッドではフォルダの中身までまとめて複製されます。
CopyFolderメソッドでフォルダを複製するには以下のように書きます
Dim CopyFold As Folder
Set CopyFold = FileSys.CopyFolder (PathA , PathB)
PathAにはコピーするフォルダのパスを入力、
PathBにはコピーしたフォルダを貼り付けた後のパスを入力します。
考え方は上記のCopyFileメソッドと同じですがiBooleanは入力しません。
同名のフォルダがあった場合は上書きされるので注意しましょう。
CreateFileメソッド
CreateFileメソッドはファイルを任意の場所に新規作成することが出来ます。
CreateFilerメソッドでファイルを新規作成するには以下のように書きます
Dim CreateFil As File
Set CreateFil = FileSys.CreateFile (PathA , iBoolean)
PathAにはファイルを作成する場所のパスを入力します。
このとき、作成するファイルの名称もパスに含めます。
たとえば「FILE1.txt」というファイルをデスクトップ上に新規作成する場合は「”C:\Users\ユーザー名\Desktop\FILE1.txt”」のように書きます。
iBooleanには「False」もしくは「True」を入力します。
ここでは貼り付け先に同じ名前のファイルがあった場合にどうするかを指定します。
Falseの場合 → 上書きしない(=何も処理をしない)
Trueの場合 → 上書きする
新規作成したファイルは変数CreateFilの中に代入されます。
つまりそのファイルに何か操作を行いたい場合には、変数CreateFilを使います。
CreateFolderメソッド
CreateFolderメソッドはフォルダを任意の場所に新規作成することが出来ます。
CreateFolderメソッドでフォルダを新規作成するには以下のように書きます
Dim CreateFold As Folder
Set CreateFold = FileSys.CreateFolder (PathA)
PathAにはフォルダを作成する場所のパスを入力します。
このとき、作成するフォルダの名称もパスに含めます。
たとえば「FOLD1」というフォルダをデスクトップ上に新規作成する場合は「”C:\Users\ユーザー名\Desktop\FOLD1”」のように書きます。
考え方は上記のCreateFileメソッドと同じですがiBooleanは入力しません。
同名のフォルダがあった場合は上書きされるので注意しましょう。
DeleteFileメソッド
DeleteFileメソッドは任意のファイルを削除することが出来ます。
DeleteFilerメソッドでファイルを削除するには以下のように書きます
FileSys.DeleteFile (PathA)
PathAには削除するファイルのパスを入力します。
DeleteFolderメソッド
DeleteFolderメソッドは任意のフォルダを削除することが出来ます。
DeleteFolderメソッドでフォルダを削除するには以下のように書きます
FileSys.DeleteFolder (PathA)
PathAには削除するフォルダのパスを入力します。
フォルダの中に入っているものまとめて削除されます。
FileExistsメソッド
FileExistsメソッドは任意のファイルの存在を確認することが出来ます。
FileExistsメソッドでファイルの存在を確認するには以下のように書きます
Dim FilExi As Boolean
FilExi = FileSys.FileExists (PathA)
PathAには存在を確認したいファイルのパスを入力します。
存在している場合は「True」、存在していない場合は「False」が変数FilExiの中に代入されます。
「このファイルがあったらこの処理」「このファイルがなかったらこの処理」というように、ファイルの存在によって処理を分岐させるときに利用します。
FolderExistsメソッド
FolderExistsメソッドは任意のフォルダの存在を確認することが出来ます。
FolderExistsメソッドでフォルダの存在を確認するには以下のように書きます
Dim FoldExi As Boolean
FoldExi = FileSys.FolderExists (PathA)
PathAには存在を確認したいフォルダのパスを入力します。
存在している場合は「True」、存在していない場合は「False」が変数FoldExiの中に代入されます。
ファイルと同じくフォルダの有無で条件分岐させたいときなどに利用します。
GetFileメソッド
GetFileメソッドは任意のファイルの存在を確認することが出来ます。
GetFileメソッドでファイルを取得するには以下のように書きます
Dim GetFil As File
GetFil = FileSys.GetFile (PathA)
PathAには取得したいファイルのパスを入力します。
取得したファイルは変数GetFilの中に代入されます。
つまり取得したファイルに何か操作を行いたい場合には、変数GetFilを使います。
GetFolderメソッド
GetFolderメソッドは任意のファイルの存在を確認することが出来ます。
GetFolderメソッドでファイルを取得するには以下のように書きます
Dim GetFold As Folder
GetFold = FileSys.GetFolder (PathA)
PathAには取得したいフォルダのパスを入力します。
取得したフォルダは変数GetFoldの中に代入されます。
つまり取得したフォルダに何か操作を行いたい場合には、変数GetFoldを使います。
まとめ
今回はCATIAマクロでのFileSystemオブジェクトについての内容でした。
CATIA自体を操作するオブジェクトではないため初めのうちはあまり使う機会はないかもしれません。
しかし、マクロをある程度理解できるようになったころに使いたくなってくるオブジェクトです。
たとえば点の座標をすべてテキストファイルに出力することもできますし、それを作成したフォルダに入れることもできます。またそのテキストファイルとExcelを連携させることもできるためかなりできることの幅が広がります。
このようにCATIA内だけでなく、他のソフトや他のデータファイルと連携する時には非常に便利なオブジェクトなので覚えておいて損はないです。
CATIAマクロを本気で勉強するなら