Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
File.umask(0237) # Установить umask.current_umask = File.umask # 0237Некоторые биты режима файла (например, бит фиксации — sticky bit) не имеют прямого отношения к разрешениям. Эта тема обсуждается в разделе 10.1.12.
10.1.10. Получение и установка временных штампов
С каждым файлом на диске связано несколько временных штампов (в разных операционных системах они различны). Ruby понимает три таких штампа: время модификации (когда в последний раз было изменено содержимое файла), время доступа (когда в последний раз файл читался) и время изменения (когда в последний раз была изменена информация о файле, хранящаяся в каталоге).
Получить эту информацию можно тремя разными способами, хотя все они дают один и тот же результат.
Методы
mtimeatimectimeFileFilet1 = File.mtime("somefile")# Thu Jan 04 09:03:10 GMT-6:00 2001t2 = File.atime("somefile")# Tue Jan 09 10:03:34 GMT-6:00 2001t3 = File.ctime("somefile")# Sun Nov 26 23:48:32 GMT-6:00 2000Если файл, представленный экземпляром
Filemyfile = File.new("somefile")t1 = myfile.mtimet2 = myfile.atimet3 = myfile.ctimeА если имеется экземпляр класса
File::Statmyfile = File.new("somefile")info = myfile.statt1 = info.mtimet2 = info.atimet3 = info.ctimeОтметим, что объект
File::StatstatFilelstatДля изменения времени доступа и модификации применяется метод
utimeTimetoday = Time.nowyesterday = today - 86400File.utime(today, today, "alpha")File.utime(today, yesterday, "beta", "gamma")Поскольку оба временных штампа изменяются одновременно, то при желании оставить один без изменения его сначала следует получить и сохранить.
mtime = File.mtime("delta")File.utime(Time.now, mtime, "delta")10.1.11. Проверка существования и получение размера файла
Часто необходимо знать, существует ли файл с данным именем. Это позволяет выяснить метод
exist?FileTestflag = FileTest::exist?("LochNessMonster")flag = FileTest::exists?("UFO")# exists? является синонимом exist?Понятно, что такой метод не может быть методом экземпляра
FileFileexist?С вопросом о том, существует ли файл, связан другой вопрос: а есть ли в нем какие-нибудь данные? Ведь файл может существовать, но иметь нулевую длину — а это практически равносильно тому, что он отсутствует.
Если нас интересует только, пуст ли файл, то в классе
File::Statzero?truefalseflag = File.new("somefile").stat.zero?Метод
size?niltruenilfalseif File.new("myfile").stat.size? puts "В файле есть данные."else puts "Файл пуст."endМетоды
zero?size?FileTestflag1 = FileTest::zero?("file1")flag2 = FileTest::size?("file2")Далее возникает следующий вопрос: «Каков размер файла?» Мы уже видели что для непустого файла метод
size?nilВ классе
FileFile::Statsize1 = File.size("file1")size2 = File.stat("file2").sizeЧтобы получить размер файла в блоках, а не в байтах, можно обратиться к методу
blocksFile::Statblksize
