Рекомендации по межплатформенным манипуляциям с файловой системой в GAMS

Я хотел бы манипулировать файловой системой из кода GAMS. Я прихожу к этому проекту в середине потока и как новичок в GAMS, но я привык писать кроссплатформенные манипуляции с файлами на других языках. Было бы хорошо, если бы этот код был кроссплатформенным для Linux и Windows. Прямо сейчас есть закомментированная строка

*$call 'mkdir "%runfolder%"'

что я хотел бы не комментировать (включить), однако мне сложно найти документацию о том, будет ли это работать кроссплатформенным (я подозреваю, что нет), а если нет, то как я мог бы сделать это в кросс-платформенном способ.

Как можно управлять файловой системой таким образом, чтобы гарантировать ее кроссплатформенность?


person Elaine Hale    schedule 26.03.2014    source источник


Ответы (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 и связанных директивах.

person Bryan P    schedule 26.03.2014
comment
Брайан П., я не спрашивал конкретно о разделителе файлов, но эта техника, безусловно, дает правильное представление. (Спасибо!) Может быть, для архивных целей ответ следует переписать, чтобы ответить на мой конкретный вопрос или объяснить методику в целом? - person Elaine Hale; 27.03.2014
comment
Теперь я вижу, что mkdir должен работать в Windows, так что, возможно, ваш ответ более правильный, чем мой вопрос ... Я постараюсь все это исправить позже. Может, пока кто-нибудь сделает мне гамс-тег :) - person Elaine Hale; 27.03.2014