Лучшие практики для кросс-платформенных манипуляций с файловой системой в 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 и соответствующие директивы.

Другие вопросы по тегам