10.1.11. Проверка существования и получение размера файла
10.1.11. Проверка существования и получение размера файла
Часто необходимо знать, существует ли файл с данным именем. Это позволяет выяснить метод exist? из модуля FileTest:
flag = FileTest::exist?("LochNessMonster")
flag = FileTest::exists?("UFO")
# exists? является синонимом exist?
Понятно, что такой метод не может быть методом экземпляра File, поскольку после создания объекта файл уже открыт. В классе File мог бы быть метод класса с именем exist?, но его там нет.
С вопросом о том, существует ли файл, связан другой вопрос: а есть ли в нем какие-нибудь данные? Ведь файл может существовать, но иметь нулевую длину — а это практически равносильно тому, что он отсутствует.
Если нас интересует только, пуст ли файл, то в классе File::Stat есть два метода экземпляра, отвечающих на этот вопрос. Метод zero? возвращает true, если длина файла равна нулю, и false в противном случае.
flag = File.new("somefile").stat.zero?
Метод size? возвращает либо размер файла в байтах, если он больше нуля, либо nil для файла нулевой длины. Не сразу понятно, почему nil, а не 0. Дело в том, что метод предполагалось использовать в качестве предиката, а значение истинности нуля в Ruby — true, тогда как для nil оно равно false.
if File.new("myfile").stat.size?
puts "В файле есть данные."
else
puts "Файл пуст."
end
Методы zero? и size? включены также в модуль FileTest:
flag1 = FileTest::zero?("file1")
flag2 = FileTest::size?("file2")
Далее возникает следующий вопрос: «Каков размер файла?» Мы уже видели что для непустого файла метод size? возвращает длину. Но если мы применяем его не в качестве предиката, то значение nil только путает.
В классе File есть метод класса (но не метод экземпляра) для ответа на этот вопрос. Метод экземпляра с таким же именем имеется в классе File::Stat.
size1 = File.size("file1")
size2 = File.stat("file2").size
Чтобы получить размер файла в блоках, а не в байтах, можно обратиться к методу blocks из класса File::Stat. Результат, конечно, зависит от операционной системы. (Метод blksize сообщает размер блока операционной системы.)
info = File.stat("somefile")
total_bytes = info.blocks * info.blksize
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Определение размера файла
Определение размера файла Размер файла можно получить, используя значение указателя файла, возвращаемое функцией SetFilePointer, если при вызове этой функции задать количество байтов, на которое должен быть перемещен указатель файла, равным 0. Для этой же цели можно
Установка размера файла, инициализация файла и разреженные файлы
Установка размера файла, инициализация файла и разреженные файлы Функция SetEndOfFile позволяет переустановить размер файла, используя текущее значение указателя файла для определения его размера. Возможно как расширение, так и усечение файла. В случае расширения файла
Причины существования невидимого Интернета
Причины существования невидимого Интернета Невидимый Интернет существует в силу целого ряда причин, как технического, так и организационного характера.Некоторые ресурсы могут быть индексированы поисковыми машинами с технической точки зрения, главное – обнаружить
ГЛАВА 5. Цикл существования объектов
ГЛАВА 5. Цикл существования объектов В предыдущей главе мы потратили достаточно много времени на то, чтобы научиться строить пользовательские типы класса в C#. В этой главе мы выясним, как среда CLR управляет уже размешенными объектами с помощью процесса, который называется
Схема лизингового управления циклом существования САО-типов и WKO-синглетов
Схема лизингового управления циклом существования САО-типов и WKO-синглетов Вы уже видели, что WKO-типы, сконфигурированные для активизации одиночного вызова, существуют только в процессе текущего вызова метода. Поэтому WKO-типы одиночного вызова являются объектами, не
Цикл существования Web-страницы ASP.NET
Цикл существования Web-страницы ASP.NET Каждая Web-страница ASP.NET имеет свой "жизненный цикл". Когда среда выполнения ASP.NET получает входящий запрос для данного файла *. aspx, в памяти размещается соответствующий тип, производный от System.Web.UI.Page, для создания которого используется
Проверка размера кэша
Проверка размера кэша Для проверки величины используемого кэша базы данных выполните следующие команды в isql:ISQL> CONNECT имя-базы-данных;ISQL> SET STATS ON;ISQL> COMMIT;Current memory = 415768Delta memory = 2048Max memory = 419840Elapsed time = 0.03 secBuffers = 2048Reads = 0Writes 2Fetches = 2ISQL> QUIT;После SET STATS ON пустая команда COMMIT
Глава 2 Уменьшение размера ЕХЕ-файла. Использование Windows API
Глава 2 Уменьшение размера ЕХЕ-файла. Использование Windows API • Источник лишних килобайт• Создание окна вручную• Окно с элементами управления• Стандартные диалоговые окна Windows• Установка шрифта элементов управленияНе секрет, что размер скомпилированного ЕХЕ-файла
11.1.5. Проверка факта сортировки файла
11.1.5. Проверка факта сортировки файла Каким образом можно узнать, отсортирован ли данный файл? Если он содержит, например, около 30 строк, то достаточно его просмотреть. А если в нем 400 строк? Примените команду sort -c, которая сама определит, отсортирован ли файл:$ sort -с video.txtsort:
18.3.5. Проверка результата копирования файла
18.3.5. Проверка результата копирования файла А теперь осуществим проверку того, успешно ли прошло копирование файла. Если команда cp не скопировала файл myfile в файл myfile.bak, отображается сообщение об ошибке. Обратите внимание, что в сообщении об ошибке фигурирует команда `basename
Продажная любовь как способ существования литературы, искусства и профессионального спорта Василий Щепетнёв
Продажная любовь как способ существования литературы, искусства и профессионального спорта Василий Щепетнёв Опубликовано 06 мая 2013 Теперь уже бывшая библиотека. Сегодня в ней можно приодеться. А где взять книгу «на почитать?» Весь бульвар