#directory #filepath #absolute #rebol #rebol2
#каталог #путь к файлу #абсолютный #перезагрузка #rebol2
Вопрос:
Я пытаюсь прочитать путь к файлу из файла конфигурации, а затем прочитать из этого каталога. Я не могу найти способ заставить это работать, потому что по какой-то причине change-dir никогда не переходит к абсолютному пути к файлу. Вот расшифровка того, как я пытаюсь заставить это работать в командной строке.
>> test: pick read/lines %test.ini 1
== "test: C/Users/thompson/Downloads/"
>> test: find test " "
== " C/Users/thompson/Downloads/"
>> test: next test
== "C/Users/thompson/Downloads/"
>> test: to file! test
== %C/Users/thompson/Downloads/
>> change-dir test
** Access Error: Cannot open /C/rscratch/C/Users/thompson/Downloads/
** Near: change-dir test
Ответ №1:
Сбой, потому что Rebol не видит
%C/Users/thompson/Downloads/
как абсолютный путь — в нем отсутствует волшебная косая черта, поэтому он рассматривается как относительный путь. Абсолютный путь — это:
%/C/Users/thompson/Downloads/
Так легко исправить, если вы уверены, что у вас нет этой косой черты:
>> test: pick read/lines %test.ini 1
== "test: C/Users/thompson/Downloads/"
>> test: find test " "
== " C/Users/thompson/Downloads/"
>> test: next test
== "C/Users/thompson/Downloads/"
>> test: to file! join "/" test
Ответ №2:
Есть много способов получить абсолютный путь к файлу Rebol,
способ перезаписи
test: "test: %/C/Users/thompson/Downloads/"
select load test [test:]
способ Linux
test: "test: /C/Users/thompson/Downloads/"
to-file trim find/tail test "test:"
способ Windows
test: "test: C:/Users/thompson/Downloads/"
to-rebol-file trim find/tail test "test:"
Вы всегда будете получать %/C/Users/thompson/Downloads/
Ответ №3:
Найдено эффективное решение.
changeDirAbsolute: func [input] [
change-dir %/
change-dir input
]
Если у кого-нибудь есть более элегантное решение, я готов его выслушать!
Ответ №4:
В Rebol, поскольку код — это данные, а данные — это код, вы можете представлять свои файлы .ini с помощью кода Rebol. Кстати, я и многие другие, кто не ориентирован на Windows, предпочитаем использовать .cfg в качестве расширения для этих типов файлов. .ini относится к «инициализации», которая во многих умах относится к загрузке системы, но также может относиться к запуску программы. .cfg немного более точен в том смысле, что это файл конфигурации для программы.
С учетом сказанного, попробуйте это вместо:
test.cfg:
test: %/c/users/thompson/downloads
Затем вы можете просто сделать это из своей программы:
>> do %test.cfg
Это автоматически заполнит путь к файлу словом ‘test.
В операционных системах, не основанных на Windows, чаще всего путь к файлу начинается с /, когда он ссылается на корневой уровень файловой системы. Если он не начинается с /, это относительный путь (начиная с текущего каталога).
Я надеюсь, что это поможет!