#ruby
#ruby
Вопрос:
На днях я играл с некоторыми ruby и написал следующий код
File.open(my_file, "w ") do | fh |
begin
fh.readonly = true <--------Exception thrown here
ensure
fh.close
end
end
это не работает, так как выдает EACCES, потому что файл доступен только для чтения, если я изменю флаг открытия на «r», это работает просто отлично. Для меня это противоречит интуиции, потому что я думал, что открытие его с помощью «r» означает, что я смогу только прочитать файл, а не изменить атрибуты.
Я использую win32-file (0.6.6) с ruby 1.8.7 (не обновляется для текущего проекта), является ли это нормальным поведением причуды файла gem win-32 или просто ошибкой, которую я могу обойти.
Чтобы установить бит только для чтения в значение true, я должен открыть с помощью w , что кажется гораздо более разумным
Немного больше информации о том, что этот тест был выполнен на 64-разрядной версии Windows Server 2003, на случай, если это приведет к различиям.
Комментарии:
1. EACCES выдается при попытке открыть файл с помощью «w » или при установке только для чтения значения true?
2. При установке только для чтения значения true, извините, я должен был быть более четким
Ответ №1:
Попробуйте открыть файл с разрешениями на чтение и запись.
File.open(my_file, "rw ") do | fh |
begin
fh.readonly = true
ensure
fh.close
end
end
Ответ №2:
В конце концов я выяснил, что это было, был другой процесс, блокирующий каталог эксклюзивной блокировкой файловой системы, он не отображался в processexplorer, но я заметил в своем журнале что-то, регистрирующее этот каталог, я остановил службу, и бац, это сработало.