Skip to main content

ファイルの操作

%Library.FileOpens in a new tab クラスには、ファイルに対して以下のようなさまざまな操作を実行できるクラス・メソッドがいくつか用意されています。ファイル自体の操作の詳細は、"%File オブジェクトの操作" を参照してください。

Note:

ファイル名またはディレクトリ名の一部を指定すると、ほとんどのメソッドでは、作業中のネームスペースの既定のグローバル・データベースが含まれるディレクトリを基準とした項目を参照しているものと想定されます。このディレクトリをここでは "既定のディレクトリ" と呼びます。このルールが当てはまらない場合は注記しています。

また、これらのメソッドでファイル名とディレクトリ名の大文字と小文字が区別されるのは、基盤となるオペレーティング・システムでファイル名とディレクトリ名の大文字と小文字が区別される場合だけです。つまり、UNIX® ではファイル名またはディレクトリ名の大文字と小文字が区別されますが、Windows では区別されません。

ファイルのコピー

ファイルをコピーするには、CopyFile() メソッドを使用します。このメソッドは、成功または失敗を示すブーリアン値を返します。

このメソッドは、以下の 4 つの引数を取ります。

  1. from — ソース・ファイルの名前を指定します。

  2. to — ターゲット・ファイルの名前を指定します。

  3. pDeleteBeforeCopy — ターゲット・ファイルが存在する場合、コピーの実行前にそのターゲット・ファイルを削除するかどうかを指定します。既定値は 0 です。

  4. return — 出力引数。これが負の値の場合、メソッドが失敗したときにオペレーティング・システムから返されるエラー・コードが含まれます。

例を以下に示します。

以下の 1 つ目の例では、ファイル old.txt をディレクトリ C:\temp 内の new.txt にコピーします。2 つ目の例では、同じファイルを既定のディレクトリ内の new.txt にコピーします。

USER>write ##class(%File).CopyFile("C:\temp\old.txt", "C:\temp\new.txt", 0, .return)
1
USER>write ##class(%File).CopyFile("C:\temp\old.txt", "new.txt", 0, .return)
1

以下の最後の例は失敗し、Windows エラー・コード 2 ("ファイルが見つかりません") が返されます。

USER>write ##class(%File).CopyFile("foo.txt", "new.txt", 0, .return)
0
USER>write return
-2

ファイルの削除

ファイルを削除するには、Delete() メソッドを使用します。このメソッドは、成功した場合に 1 を返し、失敗した場合に 0 を返します。このメソッドは、2 つの引数を取ります。1 つ目の引数は、削除するファイルの名前です。2 つ目の引数は、出力引数です。これが負の値の場合、メソッドが失敗したときにオペレーティング・システムから返されるエラー・コードが含まれます。

以下の 1 つ目の例では、メソッドは成功します。2 つ目の例は失敗し、Windows エラー・コード 2 ("ファイルが見つかりません") が返されます。

USER>write ##class(%File).Delete("C:\temp\myfile.txt", .return)
1
USER>write ##class(%File).Delete("C:\temp\myfile.txt", .return)
0
USER>write return
-2

ファイルを削除する際にワイルドカードに一致させるには、ComplexDelete() メソッドを使用します。1 つ目の引数には、削除するファイルの名前を指定します。2 つ目の引数は、出力引数です。これが負の値の場合、メソッドが失敗したときにオペレーティング・システムから返されるエラー・コードが含まれます。

以下の例では、C:\temp ディレクトリ内にある拡張子が .out のファイルをすべて削除します。

USER>write ##class(%File).ComplexDelete("C:\temp\*.out", .return)       
1

ファイルの切り捨て

ファイルを切り捨てるには、Truncate() メソッドを使用します。このメソッドは、成功した場合に 1 を返し、失敗した場合に 0 を返します。このメソッドは、2 つの引数を取ります。1 つ目の引数は、切り捨てるファイルの名前です。2 つ目の引数は、出力引数です。これが負の値の場合、メソッドが失敗したときにオペレーティング・システムから返されるエラー・コードが含まれます。

既存のファイルを切り捨てる場合、このメソッドでは、ファイルから内容が削除されますが、ファイル・システムからファイルが削除されることはありません。存在しないファイルを切り捨てた場合、空のファイルが新規作成されます。

以下の 1 つ目の例では、メソッドは成功します。2 つ目の例は失敗し、Windows エラー・コード 5 ("アクセスが拒否されました") が返されます。

USER>write ##class(%File).Truncate("C:\temp\myfile.txt", .return)
1
USER>write ##class(%File).Truncate("C:\no access.txt", .return)
0
USER>write return
-5

ファイルの名前変更

ファイルを名前変更するには、Rename() メソッドを使用します。このメソッドは、成功した場合に 1 を返し、失敗した場合に 0 を返します。このメソッドは、3 つの引数を取ります。1 つ目の引数は名前を変更するファイルの名前で、2 つ目の引数は新しい名前です。3 つ目の引数は、出力引数です。これが負の値の場合、メソッドが失敗したときにオペレーティング・システムから返されるエラー・コードが含まれます。

以下の 1 つ目の例では、メソッドは成功します。2 つ目の例は失敗し、Windows エラー・コード 183 ("既に存在するファイルを作成することはできません") が返されます。

USER>write ##class(%File).Rename("C:\temp\oldname.txt", "C:\temp\newname.txt", .return)
1
USER>write ##class(%File).Rename("C:\temp\another.txt", "C:\temp\newname.txt", .return)
0
USER>write return
-183

このメソッドを使用する際には、パスの指定を慎重に行う必要があります。例えば、以下の例は、C:\temp\oldname.txt を既定のディレクトリに移動してから、newname.txt に名前変更する処理となります。

USER>write ##class(%File).Rename("C:\temp\oldname.txt", "newname.txt", .return)
1

ファイルの比較

2 つのファイルを比較するには、Compare() メソッドを使用します。このメソッドは、2 つのファイルがまったく同じ場合にブーリアン値 1 を返し、そうでない場合に 0 を返します。このメソッドには、システム・エラー・コードを返すための出力引数はありません。

以下の 1 つ目の例では、2 つのファイルはまったく同じで、このメソッドは 1 を返します。2 つ目の例では、2 つのファイルは異なるため、このメソッドは 0 を返します。

USER>write ##class(%File).Compare("C:\temp\old.txt", "C:\temp\new.txt") 
1
USER>write ##class(%File).Compare("C:\temp\old.txt", "C:\temp\another.txt")
0

以下の例に示すように、一方または両方のファイルが存在しない場合も、このメソッドは 0 を返します。

USER>write ##class(%File).Compare("foo.txt", "bar.txt")
0
USER>write ##class(%File).Exists("foo.txt")                             
0

一時ファイルの生成

一時ファイルを生成するには、TempFilename() メソッドを使用します。このメソッドは、一時ファイルの名前を返します。このメソッドは、3 つの引数を取ります。1 つ目の引数は、一時ファイルの目的のファイル拡張子です。2 つ目は、一時ファイルの生成先のディレクトリです。これを指定しない場合、メソッドは OS 提供の一時ディレクトリにファイルを生成します。3 つ目の引数は、出力引数です。これが負の値の場合、メソッドが失敗したときにオペレーティング・システムから返されるエラー・コードが含まれます。

Windows の例 :

USER>write ##class(%File).TempFilename("txt")
C:\WINDOWS\TEMP\GATqk8a6.txt
USER>write ##class(%File).TempFilename("txt","C:\temp")
C:\temp\WpSwuLlA.txt

Unix の例 :

USER>write ##class(%File).TempFilename("", "", .return)
/tmp/filsfHGzc
USER>write ##class(%File).TempFilename("tmp", "/InterSystems/temp", .return)
/InterSystems/temp/file0tnuh.tmp
USER>write ##class(%File).TempFilename("", "/tmp1", .return)

USER>write return
-2

上記の 3 つ目の例では、ディレクトリが存在しないためメソッドは失敗し、システム・エラー・コード 2 ("このようなファイルまたはディレクトリはありません") が返されます。

FeedbackOpens in a new tab