Доступ к файлам на уровне системы

Запись в файлы

В следующем упражнении вы научитесь записывать данные в файл.

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 ⇨ Доступ к файлам ⇨ Доступ к внешним файлам ⇨ Методы доступа к внешним файлам).