Лучшие практики для кросс-платформенных манипуляций с файловой системой в GAMS
Я хотел бы манипулировать файловой системой из некоторого кода GAMS. Я прихожу к этому проекту в середине потока и как новичок в GAMS, но я привык писать кроссплатформенные манипуляции с файлами на других языках. Было бы хорошо, чтобы этот код был кроссплатформенным Linux и Windows. Прямо сейчас есть закомментированная строка
*$call 'mkdir "%runfolder%"'
что я хотел бы откомментировать (включить), однако мне трудно найти документацию о том, будет ли это работать кросс-платформенным (я подозреваю, что нет), и если нет, как я мог бы сделать это в кроссплатформенном путь.
Как я могу манипулировать файловой системой так, чтобы она гарантированно работала кроссплатформенно?
1 ответ
Попробуйте использовать глобальную переменную, которая определяет разделитель файлов. Вы можете сделать это, запросив системную переменную system.filesys и установив соответствующее значение. Такие как:
* ----- Platform Specific Adjustments
* Setup the file separator to use for relative pathnames
$iftheni %system.filesys% == DOS $setglobal filesep "\"
$elseifi %system.filesys% == MS95 $setglobal filesep "\"
$elseifi %system.filesys% == MSNT $setglobal filesep "\"
$else $setglobal filesep "/"
$endif
Затем вы можете использовать это, когда вам нужно указать пути, как в:
* ----- Set data and output directories
* By default look for data in the sibling directory "data"
$if NOT set data_dir $setglobal data_dir ..%filesep%data%filesep%
Обратите внимание, что GAMS не позволяет сделать отступ $if
и соответствующие директивы.