информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяСетевые кракеры и правда о деле ЛевинаГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Ещё возможное решение 16.07.04 19:08  Число просмотров: 1436
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
Попробуй использовать вместо "seek FH, 0,2" "seek FH,-1,2" - может так он нормально воспримет.

Тут ещё идея возникла - здесь ведь причина вполне понятна, почему он отказывается выводить правильный размер - тип данных слишком маленький. Можно использовать "seek FH, 4294967296, 0" (такой аргумент по-идее должен принять) и если ответ не "ложь" (ака если файл >= 4гигов), то тогда к результату stat прибавляешь 4294967296. С переменными такого размера Perl работает (во всяком случае мой домашний ActiveState Perl 5.8.2). Правда и тут есть ограничение - файл размером 8Гб :-). Но если уж нужен универсальный код, то для seek можно организовать цикл.

ЗЫ. За арифметику не ручаюсь.
<programming>
[Perl] Perl -> Get File Size 16.07.04 13:26  
Автор: Cyber_Onix Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Всем привет!
Возник вопрос - как при помощи Perl можно получить размер файла, если файл превышает 4Gb?
Хорошо работающая конструкция типа
$u = (stat("$ARGV[0]"))[7];
print "$u\n";
работает на небольших файлах, на файле больше 4 гб - выдает например такое число -7294976
может быть 16.07.04 15:59  
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
<"чистая" ссылка>
не знаю, прав ли я, но разве в данном случае нельзя использвать функцию length?
Да, результат будет большой, но его можно поделить, например, на 1024 и узнать результат в килобайтах...
Извиняюсь, если протупил ;))
length использует в качестве параметра скалар -... 16.07.04 17:33  
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
> не знаю, прав ли я, но разве в данном случае нельзя
> использвать функцию length?
> Да, результат будет большой, но его можно поделить,
> например, на 1024 и узнать результат в килобайтах...
> Извиняюсь, если протупил ;))
length использует в качестве параметра скалар - следовательно, надо вначале файл считать в переменную. А речь идёт о 4 Гб..
Решением может быть (не знаю, никогда не проверял на файлах 4 Гб) использование оператора -s:

open (FH,"file");
print -s FH;
close FH;

Есть ещё вариант, который опять же не знаю насколько пойдёт с большим файлом, но скорее всего он тебе поможет. Используй seek и tell:

seek FH,0,2;
#идём в нулевую позицию относительно конца файла
print tell FH;
#считываем позицию

Попробуй еще вместо stat использовать POSIX::fstat - она скорее всего умеет работать с крупными файлами, POSIX, всё таки.. Возвращает fstat список и, если не ошибаюсь, точно в таком же формате как и stat.

ЗЫ. Как проверишь - рапортуй о результатах, плз. Сам доступа к транслятору сейчас не имею, а вопрос интересный.
То же самое отрицательное число 16.07.04 18:54  
Автор: Cyber_Onix Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> open (FH,"file");
> print -s FH;
> close FH;

То же самое отрицательное число

>
> Есть ещё вариант, который опять же не знаю насколько пойдёт
> с большим файлом, но скорее всего он тебе поможет.
> Используй seek и tell:
>
> seek FH,0,2;
> #идём в нулевую позицию относительно конца файла
> print tell FH;
> #считываем позицию
>

результат -1

> Попробуй еще вместо stat использовать POSIX::fstat - она
> скорее всего умеет работать с крупными файлами, POSIX, всё
> таки.. Возвращает fstat список и, если не ошибаюсь, точно в
> таком же формате как и stat.
>

Еще не пробовал
Ещё возможное решение 16.07.04 19:08  
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
Попробуй использовать вместо "seek FH, 0,2" "seek FH,-1,2" - может так он нормально воспримет.

Тут ещё идея возникла - здесь ведь причина вполне понятна, почему он отказывается выводить правильный размер - тип данных слишком маленький. Можно использовать "seek FH, 4294967296, 0" (такой аргумент по-идее должен принять) и если ответ не "ложь" (ака если файл >= 4гигов), то тогда к результату stat прибавляешь 4294967296. С переменными такого размера Perl работает (во всяком случае мой домашний ActiveState Perl 5.8.2). Правда и тут есть ограничение - файл размером 8Гб :-). Но если уж нужен универсальный код, то для seek можно организовать цикл.

ЗЫ. За арифметику не ручаюсь.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach