флаги только для чтения файла ruby win32

#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, но я заметил в своем журнале что-то, регистрирующее этот каталог, я остановил службу, и бац, это сработало.