Доступ к файлам на уровне системы
Запись в файлы
В следующем упражнении вы научитесь записывать данные в файл.
1. Создайте в сцене цилиндр: c = cylinder()
2. Введите в новом окне редактора MAXScript Editor следующий фрагмент кода и выполните его:
fs = createFile "c:\\3dsmax8\\scripts\\cylinderData.txt"
format "radius %" c.radius to: fs
close fs
В итоге будет сформирована текстовая строка "radius 15,0", которая затем записывается в файл.
3. Откройте в текстовом редакторе WindowsNotepad файл cylinderdata.txt, чтобы проверить его содержимое, а затем закройте его в том же текстовом редакторе.
4. Перейдите в редактор сценариев, внесите изменения в строку форматирования, чтобы отформатировать два элемента в одной строке, и выполните сценарий: format "radius% heightsegs%"c.radius с.heightsegs to: fs
5. Откройте в текстовом редакторе WindowsNotepad файл cylinderdata.txt, чтобы проверить его содержимое, а затем закройте этот файл в том же текстовом редакторе.
В этом файле должна быть записана строка "radius 15.0 heightsegs1". Весь автоматически сформированный текст находится в одной строке. Это положение вам предстоит изменить в следующем пункте данного упражнения.
6. Перейдите в редактор сценариев и внесите изменения в строку форматирования следующим образом:
format "radius = %\nheightsegs = %" c.radius c.heightsegs to: fs
Итак, в файле будет записано следующее:
radius = 15.0
heightsegs = 1
Символ новой строки выглядит так: \n. Между символом n и началом следующей строки не должно быть пробела, иначе пробел станет частью строки.
7. Откройте в текстовом редакторе WindowsNotepad файл
cylinderdata.txt, чтобы проверить его содержимое, а затем закройте этот файл в том же текстовом редакторе.
Приложение
Если в файл необходимо записать очень длинный перечень данных, все эти данные необязательно записывать в одной отформатированной строке. Ведь всегда можно ввести символ новой строки. Приведенный ниже сценарий формирует тот же текст, что и предыдущий:
fs = createFile "c:\\3dsmax8\\scripts\\cylinderData.txt"
format "radius = %" c.radius to: fs format "\n" to: fs
format "segments = %" c.heightsegs to: fs
close fs
Для записи чисел без текста просто опустите текст: format"%" c.radiusto: fs
Иногда управлять файлами или каталогами приходится на уровне системы, например, для того, чтобы создать новый каталог, получить список всех файлов в этом каталоге или скопировать файлы. Для решения подобных задач в MAXScript имеется целый ряд функций.
Ниже приведен перечень этих функций и краткие сведения о том, как они реализованы. Введите каждую из них в приемнике команд, чтобы просмотреть результаты их выполнения.
• getFiles — возвращает массив строковых значений в виде имен файлов, соответствующих указанному имени файла или обозначению любых символов. В приведенном ниже примере осуществляется поиск в каталоге c:\temp всех файлов с расширением .max:
fileList = getFiles "c:\\temp\\*.max"
В этом примере fileList представляет собой массив строковых значений в виде имен файлов, соответствующих заданному критерию поиска. Используя свойство .count данного массива, можно определить число таких файлов:
numFiles = fileList.count
Примечание. Свойство .count, обозначающее число элементов данного массива, позволяет определить наличие найденных файлов. Если это число равно нулю, значит, файлы, соответствующие заданному критерию поиска, отсутствуют.
• getDirectories — возвращает такой же массив каталогов, как и у функции getFiles. Так, приведенная ниже строка кода возвращает все каталоги, находящиеся на корневом уровне диска C:\:
directories = getDirectories "c:\\*"
• makeDir — создает каталог. Синтаксис этой функции следующий:
makeDir "c:\\newDir"
• deleteFile — удаляет из системы указанный файл. Синтаксис этой функции следующий:
deleteFile "c:\\temp\\dontneedit.max"
Приложение
• renameFile — изменяет имя файла. В качестве первого аргумента этой функции указывается текущее имя файла, а в качестве второго аргумента — новое имя файла:
renameFile "c:\\nameidontlike.max" "c:\\bettername.max"
• copyFile — копирует файл. Синтаксис этой функции такой же, как и у функции renameFile:
copyFile "c:\\oldfile.mах" "c:\\newfile.mах"
Дополнительные сведения о применении перечисленных выше функций приведены в следующем разделе справочного руководства по MAXScript: MAXScript Tools and Interaction with 3dsMax ⇨ FileAccess ⇨ External File Access ⇨ External File Methods (Инструменты MAXScript и взаимодействие с 3dsMax ⇨ Доступ к файлам ⇨ Доступ к внешним файлам ⇨ Методы доступа к внешним файлам).