- Работа с данными
- Манипуляции с файлами
- Перемещение и копирование файлов. File::Copy
- Полезные ссылки
Работа с данными
Создание файла, открытие файла, запись в файл
|
1 2 3 4 5 6 7 8 |
use strict; open FILE, '>>file.txt'; print FILE "Холодное сердце согреешь руками\n"; print FILE "И я буду рядом, ночами и днями\n"; close FILE; |
Файл можно открыть для чтения, записи в конец файла, перезаписи, чтения/записи. Для этого нужно использовать префиксы:
- < - режим чтения
- > - режим записи. Если файл уже содержал что-то, эти данные будут удалены
- >> - режим записи. Запись новых данных будет вестись в конец файла. Старые данные сохраняются
- +< - сохраняет содержимое открываемого файла
- +> - сначала очищает содержимое открываемого файла
- +>> - сохраняет содержимое открываемого файла, запись в файл всегда осуществляется в конец содержимого файла
Если префикс не задан, файл по умолчанию будет открыт в режиме чтения.
Если открыть для записи файл, который еще не существует, то при завершении работы будет создан новый файл.
Чтение данных из файла
|
1 2 3 4 5 6 7 |
open FILE, 'file.txt'; while (defined (my $file_line = <FILE>)) { print $file_line; } close FILE; |
Чтение из файла осуществляется построчно.
Манипуляции с файлами
Как переименовать файл
|
1 |
rename "file.txt", "file2.txt"; |
Функция rename - переименовывает указанный список файлов. Возвращает 1 в случае успешного переименования, в другом случае - 0.
|
1 2 |
my $status = rename "file2.txt", "file.txt"; print "Файл успешно переименован\n" if $status; |
Как получить информацию о файле (дата создания и т.п.)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/usr/local/bin/perl use strict; my %file_info = (); ($file_info{dev},$file_info{ino},$file_info{mode},$file_info{nlink}, $file_info{uid},$file_info{gid},$file_info{rdev},$file_info{size},$file_info{atime}, $file_info{mtime},$file_info{ctime},$file_info{blksize}, $file_info{blocks}) = stat('file.txt'); my ( $sec, $min, $hour, $mday, $mon, $year, $wday ) = gmtime($file_info{mtime}); $year+=1900; $mon+=1; print "Время последнего изменения файла: $mday-$mon-$year , $hour:$min\n"; exit; |
Функция stat возвращает информацию в списковом контексте, в следующем порядке:
- dev - Номер устройства в файловой системе
- ino - Номер индексного дескриптора
- mode - Режим файла (тип и права доступа)
- nlink - Количество жестких ссылок на файл (в отсутствии ссылок равно 1)
- uid - Числовой идентификатор владельца файла
- gid - Числовой идентификатор группы владельца файла
- rdev - Идентификатор устройства (только для специальных файлов)
- size - Размер файла в байтах
- atime - Время последнего обращения к файлу с начала эпохи
- mtime - Время последнего изменения файла с начала эпохи
- ctime - Время изменения индексного дескриптора с начала эпохи
- blksize - Предпочтительный размер блока для операций ввода/вывода
- blocks - Фактическое количество выделенных блоков для размещения файла
Начало эпохи датируется 1 января 1900 года 0 часов 0 минут.
Таким образом можно, например, проверить дату последнего изменения файла и удалить его.
Как изменить время последнего обращения к файлу и его модификации
Функция позволяет utime() изменить время последнего обращения (atime) и модификации файла (mtime).
|
1 2 3 4 |
my $atime = time; # т.е. текущее время my $mtime = time; utime($atime, $mtime, "file.txt", "file2.txt"); |
Функция возвращает число файлов, для которых операция изменения времени прошла успешно.
Как удалить файл
Функция unlink удаляет переданный список файлов. Возвращает число успешно удаленных файлов.
|
1 |
unlink "file2.txt", "file3.txt"; |
Как изменить права доступа к файлам
|
1 |
chmod 0666, "file.txt"; |
Функции chmod можно передать список файлов, тогда права доступа будут изменены к каждому из них. Функция задает права доступа для владельца файла, группы и для всех остальных пользователей.
chmod() возвращает число файлов, права доступа к которым были благополучно изменены.
Памятка: чтобы установить права доступа, нужно указать число:
- 1 (- -x) - возможно только выполнение файла
- 2 (-w-) - возможна только запись в файл
- 3 (-wx) - только запись в файл и его выполнение
- 4 (r- -) - только чтение данных из файла
- 5 (r-x) - только чтение и выполнение файла
- 6 (rw-) - только чтение и запись в файл
- 7 (rwx) - полный доступ: возможно чтение, запись в файл и его запуск на выполнение.
Как изменить владельца файла
Чтобы изменить владельца файла, надо знать его uid и gid. Ну и кроме того, надо иметь права на выполнение данной команды.
Если нужно изменить владельца сразу нескольким файлам, можно передать ф-ции список файлов.
Узнать uid и gid текущего владельца файла можно с помощью ф-ции stat.
|
1 2 3 4 5 |
my $uid = 257; my $gid = 7; my $res = chown($uid, $gid, "file.txt", "assa.txt"); print "Число измененных файлов: $res\n"; |
chown() возвращает число файлов, владелец для которых был благополучно изменен.
Перемещение и копирование файлов. File::Copy
Модуль File::Copy предоставляет 2 удобные функции для копирования и перемещения файлов из одного места в другое.
|
1 2 3 4 |
use File::Copy; copy("/home/user/file.txt","/home/user/file2.txt") || die "Copy failed: $!"; move("/home/user/file2.txt","/home/user/file3.txt") || die "Move failed: $!"; |
Оба метода позволяют использовать не только имена, но и дескрипторы файлов. Например, так:
|
1 2 3 4 5 6 |
use File::Copy; open FILE, '>file.txt'; copy ("/home/user/file2.txt", \*FILE) or die "Copy failed: $!"; close FILE; |
Полезные ссылки
http://perl.find-info.ru/perl/006/file.htm
http://www.spravkaweb.ru/perl/file/
http://www.codenet.ru/webmast/perl/files.php
не получается создать файл не могу понять почему, помогите плизз
Нужны какие-то подробности. Например, код, который вы пытаетесь использовать. Проблема может быть в чем угодно, вплоть до того, что у скрипта не хватает прав на создание файлов в каком-либо каталоге.