информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медЗа кого нас держат?Страшный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 С наступающим 
 Microsoft обещает радикально усилить... 
 Ядро Linux избавляется от российских... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Ещё возможное решение 16.07.04 19:08  Число просмотров: 1405
Автор: 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