Подтвердить что ты не робот

Слэш и обратная косая черта в Ruby

Я хочу написать приложение, которое работает в windows и linux. но у меня есть проблема пути, потому что Windows использует "\", а Linux использует "/". Как я могу решить эту проблему. спасибо

4b9b3361

Ответ 1

В Ruby нет разницы между путями в Linux или Windows. Путь должен использоваться / независимо от среды. Итак, для использования любого пути в Windows замените все \ на /. File#join будет работать как для Windows, так и для Linux. Например, в Windows:

Dir.pwd
=> "C/Documents and Settings/Users/prince"

File.open(Dir.pwd + "/Desktop/file.txt", "r")
=> #<File...>

File.open(File.join(Dir.pwd, "Desktop", "file.txt"), "r")
=> #<File...>

File.join(Dir.pwd, "Desktop", "file.txt")
=> "C/Documents and Settings/Users/prince/Desktop/file.txt"

Ответ 3

Используйте класс Pathname для генерации путей, которые затем будут корректными в вашей системе:

a_path = Pathname.new("a_path_goes_here")

Преимущество этого в том, что он позволит вам связывать каталоги с помощью оператора +:

a_path + "another_path" + "and another"

Вызов a_path.to_s затем генерирует правильный путь для системы, в которой вы находитесь.

Ответ 4

До тех пор, пока Ruby выполняет работу, / в именах путей нормально в Windows

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

C:/projects/a_project/some_file.rb'.gsub('/', '\\') работает шарм. (Предполагается, что это двойная обратная косая черта - этот редактор видит ее как побег даже в одинарных кавычках.)

Используйте что-то вроде этого перед отправкой строки для имени пути из элемента управления Ruby.

Вам нужно будет убедиться, что ваша программа знает, на какой ОС она работает, поэтому она может решить, когда это необходимо. Один из способов - установить константу в начале прогона программы, что-то вроде этого

::USING_WINDOWS = !!((RUBY_PLATFORM =~ /(win|w)(32|64)$/) || (RUBY_PLATFORM=~ /mswin|mingw/))

(Я знаю, что это работает, но я не писал его, поэтому я не понимаю двойной удар...)

Ответ 5

Да, это раздражает, поскольку пользователи Windows продолжают заменять эти обратные косые черты на косые черты и наоборот, если вам нужен путь, чтобы скопировать его в ваш файловый менеджер, поэтому я делаю это как его. Это не вредит, если вы находитесь на Linux или Mac и сохраняете много неприятностей в окнах.

path = 'I:\ebooks\dutch\_verdelen\Komma'.gsub(/\\/,'/')

Dir.glob("#{path}/**/*.epub").each do |file|
    puts file
end