次のメソッドは、外部ファイルおよびディレクトリへのアクセスを提供します。
getFiles <wild_card_filename_string> recurse:<boolean>
与えられたワイルドカードのパス名と一致するファイル名の配列を返します。recurse
が true として指定されている場合は、指定したディレクトリ以降のディレクトリを再帰的に検索します。既定値は false です。
例:
次のコードは、c:¥\foo内のすべての .max シーン ファイルの配列を取得して、ループ処理で配列のファイルを開き、各ファイル内のオブジェクトを出力します。
files = getFiles "c:\\foo\\*.max"
for f in files do (loadMAXFile f; print objects)
getFiles()
は、ファイル またはファイル パターンが存在するかどうかを判断するときにも使用できます。
例
次の関数は指定されたファイル名またはパターンが存在する場合に true
を返します。
fn existFile fname = (getfiles fname).count != 0
単一のファイルのみをチェックし、ワイルドカード パターンをサポートしない「doesFileExist()」も参照してください。
getDirectories <wild_card_directory_name_string> recurse:<boolean>
与えられたワイルドカードのディレクトリ パス名と一致するディレクトリ パスの配列を返します。recurse
が true として指定されている場合は、指定したディレクトリ以降のディレクトリを再帰的に検索します。既定値は false です。
スクリプト:
fn getFilesRecursive root pattern =
(
dir_array = GetDirectories (root+"/*")
for d in dir_array do
join dir_array (GetDirectories (d+"/*"))
my_files = #()
for f in dir_array do
join my_files (getFiles (f + pattern))
my_files
)
--get all .ms files from the folder c:/temp
--and all its subfolders:
getFilesRecursive "c:/temp" "*.ms"
makeDir <directory_path_string> all:<boolean>
与えられた名前を使って新しいディレクトリを作成します。
パスが問題なく作成されたか、既に存在する場合には true
を返します。
引数が無効なパスであるか、書き込み権が不十分なためにパスが作成されなかった場合には false
を返します。
オプションの all:
キーワード引数が true
に設定されると(3ds Max 9 以降の既定値。3ds Max 8 での既定値はfalse
)、パスで指定されたすべてのサブディレクトリ レベルが作成されます(存在しない場合)。
MAXScript では、ディレクトリを削除するためのメソッドは提供されていません。回避策は HiddenDOSCommand() の最後の例を参照してください。
例:
makeDir @"c:\temp\test\deleteme\if\you\can" all:false
false --unless the path already exists up to the \you folder
makeDir @"c:\temp\test\deleteme\if\you\can" all:true
true --creates all the folders listed in the path
makeDir @"c:\temp\test\deleteme\if\you" all:true
true --even if the previous call had created the path, still ok
makeDir @"a:\temp"
false --unless you still have a Floppy drive and a disk for it!
<boolean>removeDir <directory_path_string>
指定したディレクトリを削除します。辞書が削除された場合は、true を返します。
deleteFile <filename_string>
指定されたファイルを削除します。
ファイルが MAXScript 内で開かれている場合は失敗します。開かれているファイルを閉じるには、ASCII ストリーム、バイナリ ストリーム用の適切な close()メソッドを使用するか、ローカル スコープが原因でハンドルにアクセスできない場合には gc().
を使用して手動ガベージ コレクションを呼び出します。
実際のファイルについてのみ動作し、makeDir()
を使用して作成されたディレクトリには使用できません。ディレクトリを削除する方法については、
.
成功した場合は true
を、失敗した場合は false
を返します。
renameFile <old_filename_string> <new_filename_string>
ファイル名を新しいファイル名に変更します。
これは、ディレクトリ間でファイルを移動するときにも使用できます。
新しい名前のファイルが既に存在していたり、名前を変えようとしているファイルが MAXScript 内で開かれている場合、処理は失敗します。
成功した場合は true
を、失敗した場合は false
を返します。
copyFile <existing_filename_string> <target_filename_string>
既存のファイルを新しいファイルにコピーします。
既存のファイルが MAXScript 内で開かれている場合、ターゲット ファイルを作成できない場合、またはターゲット ファイルがすでに存在している場合は失敗します。後者の場合は、deleteFile()
を使用して最初に既存のターゲット ファイルを削除することができます。
成功した場合は true
を、失敗した場合は false
を返します。
getFileSize <filename_string>
指定のファイルのサイズをバイトで返します。
ファイルを見つけられない場合は 0 (ゼロ)を返します。
例:
GetFileSize (getDir #maxRoot + "\\3dsmax.exe")
--> 9881600
getFileAttribute <filename_string> <attribute>
setFileAttribute <filename_string> <attribute> <boolean>
ファイルに関連付けられているアトリビュートを取得/設定します。
get 関数は、指定されたアトリビュートの状態に基づいて true
または false
を返します。
set 関数は、指定された個々のアトリビュートの状態を設定します(その他のアトリビュートには何も行いません)。
有効な <attribute>
値は以下のとおりです。
#readOnly #hidden #system #directory #archive #temporary #normal
getFileModDate <filename_string>
指定されたファイルの修正日を文字列で返します。例: "1/29/99 1:52:05 PM"
getFileCreateDate <filename_string>
指定されたファイルの作成日を文字列で返します。
getFileVersion <filename_string>
指定されたファイルのファイルおよび製品バージョンを返します。ファイル内でデータが指定されていないと、「不明」が返されます。通常、このデータは実行ファイルおよびアプリケーション拡張ファイル(.dll など)に対して指定されます。
例:
GetFileVersion (getDir #maxRoot + "\\3dsmax.exe")
--> "12,0,0,91 12,0,0,91"
getFileSecurityInfo <file_name> <attribute> testFileAttribute: <boolean>
指定されたファイルが存在し、指定されたセキュリティ アトリビュートが設定されている場合は true
を返します。ここで、<attribute>
は #read
、#write
、#execute
、#all
のいずれかです。
<file_name>
がディレクトリで、かつ <attribute>
が #write
または #all
であり、ディレクトリのセキュリティ属性が書き込み可能であることを示している場合には、このメソッドはこのディレクトリに一時ファイルを作成することによって、このディレクトリが実際に書き込み可能であることを確認しようとします。
testFileAttribute:
が false
であるか指定されていない場合、または <file_name>
にディレクトリが指定されている場合は、ファイルのファイル属性はテストには含まれ ません。
testFileAttribute:
が true
で <file_name>
にファイルが指定されている場合は、ファイル属性(読み出し、書き込み、実行)はセキュリティ属性と AND 処理されます。
3ds Max 2010以降で使用可能です。
isDirectoryWriteable <dir_name>
指定されたディレクトリが存在し、そのディレクトリに書き込める場合は、true
を返します。
3ds Max 2010以降で使用可能です。
getMAXIniFile()
3ds Max 6 以降 では、現在の 3dsmax.ini ファイルを文字列で返します。ini 設定をレジストリ内に保存する製品の場合、このメソッドは undefined を返します。INI ファイル キーへのアクセス も参照してください。
その他の参考例:
for f in getFiles "3dsmax\\maps\\*.jpg" do deleteFile f
for d in getDirectories "D:\\foo\\*" do
for f in getFiles (d + "*.*") do
copyFile f ("C:\\temp\\" + getFilenameFile f + getFilenameType f)
if (getFiles "foo*.max").count == 0 do
print "No Files Match Pattern 'foo*.max'!"
getEncoding <filename_string>
3ds Max 2022.2 Update の新機能: 指定されたテキスト ファイルの文字エンコーディングを返します。指定されたテキスト ファイルが見つからない場合や読み取れない場合は、
#Unknown
を返します。
有効な戻り値は次のとおりです。
#ANSI
#ASCII
#UTF7_With_BOM
#UTF7
#UTF8_With_BOM
#UTF8
#UTF16_LE_With_BOM
#UTF16_BE_With_BOM
#UTF16_LE
#UTF16_BE
#UCS4_LE_With_BOM
#UCS4_BE_With_BOM
#UCS4_LE
#UCS4_BE
#Unknown
例
filename = @"C:\Program Files\Autodesk\3ds Max 2022\en-US\3dsMax.ini"
getEncoding filename
--> #UTF8_With_BOM