Текстовый файл содержит строки разной длины, общий размер файла не превышает 1 МБ

Обновлено: 02.07.2024

Возвращает размер файла в байтах или false (и генерирует ошибку уровня E_WARNING ) в случае ошибки.

Примечание. Поскольку целочисленный тип PHP является знаковым, а многие платформы используют 32-битные целые числа, некоторые функции файловой системы могут возвращать неожиданные результаты для файлов размером более 2 ГБ.

Ошибки/Исключения

В случае сбоя выдается E_WARNING.

Примеры

// выводит, например. какой-то файл.txt: 1024 байта

$filename = 'somefile.txt' ;
echo $filename . ':' . размер файла ($имя_файла). байты;

Примечания

Примечание. Результаты этой функции кэшируются. Подробнее см. в разделе clearstatcache().

Начиная с PHP 5.0.0, эту функцию также можно использовать с некоторыми обработчиками URL. См. Поддерживаемые протоколы и оболочки, чтобы определить, какие оболочки поддерживают семейство функциональных возможностей stat().

См. также

Пользовательские заметки 36 заметок

Чрезвычайно простая функция для получения человеческого файла.
function human_filesize ($bytes, $decimals = 2) $sz = 'BKMGTP';
$factor = floor ((strlen ($bytes) - 1) / 3);
возврат sprintf("%.<$decimals>f" ,$bytes/pow(1024,$factor)) . @ $sz [ $factor ];
>
?>

если вы недавно добавили что-то в файл и закрыли его, то этот метод не покажет добавленные данные:
// получить содержимое файла в строку
$filename = "/usr/local/ что-то.txt" ;
$handle = fopen ( $filename , "r" );
$contents = fread ($handle, размер файла ($filename));
fclose ($handle);
?>
Вы должны вставить вызов clearstatcache() перед вызовом png()
Я потратил два часа, чтобы найти это =/

Первый приведенный пример может привести к предположению, что эта функция работает с локальным именем файла, например. $fs = размер файла ("error_log"), но если вы вручную удалите какой-либо текст, а затем сохраните и закроете файл, в следующий раз, когда вы проверите размер файла ("error_log"), он вернет исходное значение, потому что значение кэшируется из соображений производительности. . Если бы вы этого не знали, это выглядело бы как неприятная ошибка.

Итак, все советуют вам вставить функцию clearstatcache(), которая должна очистить кэшированное значение и позволить вам получить текущий размер файла, но она по-прежнему ничего не делает и выглядит как очередная ошибка!

Однако я обнаружил, что если всегда указывать ПОЛНЫЙ ПУТЬ
например, $fs = png("/user/some/path/error_log");
тогда clearstatcache() даже не нужен.

/**
* Преобразует байты в удобочитаемый размер файла.
*
* @param string $bytes
* @return string удобочитаемый размер файла (2,87 Мб)
* @author Могилев Арсений
*/
функция FileSizeConvert ($bytes)
$bytes = floatval ($bytes);
$arBytes = array(
0 => array(
"UNIT" => "TB" ,
"VALUE" => pow ( 1024 , 4 )
),
1 => array(
"UNIT" => "GB" ,
"VALUE" => pow ( 1024 , 3 )
),
2 => array(
"UNIT" => "MB" ,
"VALUE" => pow ( 1024 , 2 )
),
3 => array(
>"UNIT" => "KB" ,
"VALUE" => 1024
),
4 => array(
"UNIT" => "B" ,
"ЗНАЧЕНИЕ" => 1
),
);

foreach($arBytes as $arItem)
if( $bytes >= $arItem ["VALUE"])
$result = $bytes / $arItem ["VALUE"];
$result = str_replace( "." , "," , strval(round( $result , 2 ))). " " . $arItem["ЕДИНИЦА"];
перерыв;
>
>
вернуть $result ;
>

/**
* Возвращаемый размер файла (даже для файла > 2 Гб)
* Для размера файла, превышающего PHP_INT_MAX (2 147 483 647), функция размера файла PHP переходит от -PHP_INT_MAX к PHP_INT_MAX.
*
* @param string $path Путь к файлу
* @return смешанный Размер файла или false в случае ошибки
*/
функция realFileSize ( $path )< br /> если (! file_exists ( $path ))
вернуть false ;

$size = размер файла ($path);

if (!( $file = fopen ( $path , 'rb' )))
вернуть false ;

//Быстрый переход на первые 2 ГБ с помощью fseek. После этого fseek не работает на 32-битном php (внутренне использует int)
$size = PHP_INT_MAX - 1 ;
if (fseek ($file, PHP_INT_MAX - 1) !== 0)
fclose ($file);
вернуть ложь;
>

$length = 1024 * 1024 ;
while (! feof ( $file ))
< //Читать файл до конца
$read = fread ( $file , $length );
$size = bcadd ($size, $length);
>
$size = bcsub ($size, $length);
$size = bcadd ($size, strlen ($read));

fclose ( $file );
возврат $size ;
>

Эта функция также может быть полезна для управления кэшированием браузера. Например, у вас есть таблица стилей, и вы хотите, чтобы у всех была самая последняя версия. Вы можете переименовывать его каждый раз, когда редактируете, но это будет пустой тратой времени. Вместо этого вы можете сделать так:

Это также относится к JS и изображениям с таким же именем.

В Windows 10 размер файла явно не может работать с относительными путями. Вместо этого используйте абсолютный путь. $size = размер файла(".\\myfile.txt"); у меня не работает, а "d:\\MyFiles\\Myfile.txt" подойдет. То же самое относится и к подобным функциям, таким как is_file() или stat(). Они не будут работать правильно, если не указан абсолютный путь.

// Восстановить все файлы размером более > 4 ГБ.
// Работает на 32-битной и 64-битной версиях php и поддерживает Linux
// Используется расширение com_dotnet

функция getSize ($file) $size = размер файла ($file);
if ( $size 0 )
if (!( strtoupper ( substr ( PHP_OS , 0 , 3 )) == 'WIN' )) $size = trim (` stat -c%s $file ` );
>
else $fsobj = новый COM ("Scripting.FileSystemObject" );
$f = $fsobj -> GetFile ( $file );
$size = $f -> Размер ;
>
возврат $size ;
>
?>

Самая простая и эффективная реализация удаленного получения файлов:

Вот мой супербыстрый метод получения файлов >2 ГБ для вывода правильного размера в байтах в любой версии Windows, которая работает как с 32-разрядной, так и с 64-разрядной версиями.

функция find_filesize ( $file )
if( substr ( PHP_OS , 0 , 3 ) == "WIN" )
exec ( 'for %I in ("' . $file . '") сделать @echo %~zI', $output);
$return = $output [ 0 ];
>
else
$return = размер файла ( $file );
>
возврат $возврат ;
>

//Использование: find_filesize("path");
//Пример:
echo "Размер файла: " . find_filesize ("D:\Server\movie.mp4" ). "" ;
?>

Эта функция возвращает точный размер файла размером более 2 ГБ в 32-разрядной ОС:

функция file_get_size ($file) //открыть файл
$fh = fopen ($file, "r");
//объявить некоторые переменные
$size = "0" ;
$char = "" ;
//установить указатель файла на 0; Я немного параноик, вы можете удалить этот
fseek ( $fh , 0 , SEEK_SET );
//обнулить множитель
$count = 0 ;
while ( true ) // переход на 1 МБ вперед в файле
fseek ( $fh , 1048576 , SEEK_CUR );
//проверяем, действительно ли мы вышли из файла
if (( $char = fgetc ( $fh )) !== false ) //если нет, продолжаем
$count ++;
> else //иначе вернуться туда, где мы были до выхода, и выйти из цикла
fseek ( $fh , - 1048576 , SEEK_CUR );
перерыв;
>
>
//мы можем сделать скачок на $count, так что размер файла будет как минимум $count * 1.000001 МБ
//1048577, потому что мы скачем на 1 МБ и fgetc перейдет 1 B вперед тоже
$size = bcmul ("1048577" , $count );
//теперь считаем последние байты; они всегда меньше 1048576, так что это довольно быстро
$fine = 0 ;
while( false !== ( $char = fgetc ( $fh ))) $fine ++;
>
//и добавляем их
$size = bcadd ( $size , $fine );
fclose ( $fh );
возврат $size ;
>
?>

function dir_size($file) <
//проверено на win 7x64 php 5.4
exec('dir /s /a "' . $file.'"', $inf);
$r=explode(' ',$inf[count($inf)-2]);
$rr = preg_replace('~[^\d]+~','',$r[count($r)-2]);
вернуть $rr;
>

// лучше всего преобразовать отрицательное число с помощью File Size .
// не работает с файлами размером более 4 ГБ
//
// специально для 32-битных систем. ограничение размера файла преобразования составляет 4 ГБ или
// 4294967296. почему мы получаем отрицательные числа? по какому файлу
// указатель счетчика должен работать с значением PHP MAX 2147483647.
// Смещение файла : 0 , 1 , 2 , 3 , . 2147483647 = 2 ГБ
// чтобы подняться выше, используются отрицательные числа 4 ГБ
// и поэтому после 2147483647 мы будем -2147483647
// -2147483647, -2147483646, -2147483645, - 2147483644 . 0 = 4 ГБ
// поэтому 0, 2147483647 и -2147483647 равны 0. все готово 4 ГБ = 4294967296
// первое смещение на 0 и последнее смещение на 0 из 4 ГБ должны быть добавлены в
// ваши вычисления, поэтому "+ 2" для количества байтов exate .

Слегка отредактированная версия функции от rommel на rommelsantor dot com. Теперь он возвращает размер файла в два символа, что немного удобнее для чтения.

function human_filesize ($bytes, $decimals = 2) $factor = floor ((strlen ($bytes) - 1) / 3);
if ($factor > 0) $sz = 'KMGT';
возврат sprintf("%.<$decimals>f" ,$bytes/pow(1024,$factor)) . @ $sz [ $фактор - 1 ] . 'В' ;
>

print human_filesize ( 12 , 0 ); // 12B
print human_filesize ( 1234567890 , 4 ); // 1,1498 ГБ
print human_filesize ( 123456789 , 1 ); // 117,7 МБ
print human_filesize ( 12345678901234 , 5 ); // 11.22833 ТБ
print human_filesize ( 1234567 , 3 ); // 1,177 МБ
print human_filesize ( 123456 ); // 120,56 КБ
?>

Я удалил единицы P, потому что strlen не работает должным образом с целыми числами длиннее 14 цифр. Хотя это может быть только ограничение моей системы.

вернуть $х;
>
?>

Если у вас есть перенаправление на сервере (например, Redirect Permanent в .htaccess)

В этом случае у нас есть, например:
[content-length] => Array

[0] => 294 // Размер запрошенного файла

[1] => 357556 // Перенаправленный файл реального размера

У меня запущен скрипт cli, который использует функцию размера файла для соединения ssh2_sftp. У него есть проблема с ограничением> 2 ГБ, хотя локально такой проблемы нет. Мне удалось обойти это, выполнив команду «du -sb» через ssh2_shell.

Следующая функция принимает в качестве входных данных ресурс ssh2_connect и путь. Это может быть не очень аккуратно, но на данный момент решает проблему.

функция fSSHFileSize ( $oConn , $sPath ) <
if( false !== ( $oShell = @ ssh2_shell ( $oConn , 'xterm' , null , 500 , 24 , SSH2_TERM_UNIT_CHARS ))) <
fwrite ($oShell, "du -sb '". $sPath. "'" . PHP_EOL);
спать ( 1 );
while( $sLine = fgets ( $oShell )) <
flush ();
$aResult [] = $sLine ;
>
fclose ($oShell);
$iSize = 0 ;
if( count ( $aResult ) > 1 ) <
$sTemp = $aResult [ count ( $aResult )- 2 ];
$sSize = substr ( $sTemp , 0 , strpos ( $sTemp , chr ( 9 )));
if( is_numeric ( trim ( $sSize ))) <
$iTemp = (int) $sSize ;
if($iTemp > "2000000000") $iSize = $iTemp;
>
>
возврат $iSize ;
>
возврат 0 ;
>
?>

// использовать системные окна для предоставления размера файла
// лучше всего для php 32bit или php 64bit
// Я не знаю, работает ли это в других окнах, но в Windows 10 работает хорошо здесь

echo png_cmd ('c:\\', 'log.txt'); //возврат 1135

функция png_cmd ($folder, $file) return exec('forfiles /p'. $folder. '/m "'. $file. '" /c "cmd /c echo @fsize"');
>

// извлечь размер файла с помощью команды dir windows 10
// подходит для всех систем 32/64 и является лучшей совместимостью с фиктивным файлом
// но не может вернуть значение в (int) для лучшего возврата использовать с плавающей запятой

( "d:\\test.mkv" ); //11,5 ГБ => возврат (с плавающей запятой) 12401880207

функция png_dir ($file) exec('dir'. $file, $inf);
$size_raw = $inf [ 6 ];
$size_exp = взорвать (" ", $size_raw );
$size_ext = $size_exp [ 19 ];
$size_int = (float) str_replace ( chr ( 255 ), '' , $size_ext );
вернуть $size_int ;
>

Я создал удобную функцию, используя фрагменты кода от kaspernj в gmail.com и md2perpe в gmail.com, которые должны получать файлы размером > 4 ГБ в Windows, Linux и Mac (как минимум).

функция getSize ($file) <
$size = размер файла ($file);
if ( $size 0 )
if (!( strtoupper ( substr ( PHP_OS , 0 , 3 )) == 'WIN' ))
$size = trim (` stat -c% s $файл `);
else <
$fsobj = новый COM ("Scripting.FileSystemObject");
$f = $fsobj -> GetFile ( $file );
$size = $file -> Size ;
>
возврат $size ;
>
?>

Быстрая реализация, определяющая фактический размер больших файлов (>2 ГБ) на 32-разрядном PHP:

функция RealFileSize($fp)
$pos = 0;
$size = 1073741824;
fseek($fp, 0, SEEK_SET);
пока ($size > 1)
fseek($fp, $size, SEEK_CUR);

if (fgetc($fp) === false)
fseek($fp, -$size, SEEK_CUR);
$size = (int)($size / 2);
>
else
fseek($fp, -1, SEEK_CUR);
$pos += $size;
>
>

пока (fgetc($fp) !== false) $pos++;

Входные данные — это дескриптор открытого файла. Возвращаемое значение — целое число для размеров файлов

Вот лучший способ (который я нашел) получить размер удаленного файла. Обратите внимание, что запросы HEAD не получают фактическое тело запроса, они просто извлекают заголовки. Таким образом, выполнение запроса HEAD к ресурсу размером 100 МБ займет столько же времени, сколько запрос HEAD к ресурсу размером 1 КБ.

echo 'Статус HTTP: ' . $ статус . "\n" ;
echo 'Длина содержимого: ' . $контентадлина;
?>

Результат:

На 64-разрядных платформах это кажется достаточно надежным для получения размера файлов > 4 ГБ

= fopen ($filename, 'r');
fseek($a, 0, SEEK_END);
$filesize = ftell ( $a );
fclose ( $a );
?>

Здесь функция для получения размера файла понятным для человека способом с десятичным разделителем, разделителем тысяч, десятичными знаками.

функция convertFileSize($file, $size=null, $decimals=2, $dec_sep='.', $thousands_sep=',') if (!is_file($file)) return "Фигура не существует";
>
$bytes = размер файла($file);
$size = 'БКМГТП';
if (isset($size)) $factor = strpos($size, $size[0]);
if ($factor===false) return "El tamaño debe ser B, K, M, G, T o P";
>
> else $factor = floor((strlen($bytes) - 1) / 3);
$size = $size[$factor];
>
return number_format($bytes / pow(1024, $factor), $decimals, $dec_sep, $thousands_sep).' '.$размер;
>

// Размер файла для окон
// if png() php > PHP_INT_MAX (4 294 967 296) :: failed
// pngfile_cmd возвращает значение, измеренное окнами

функция png_cmd ($file) $pth = pathinfo ($file);
$fz = размер файла ( $file );
$fx = exec ( 'forfiles /p ' . $pth [ 'имя_каталога' ] . ' /m "' . $pth [ 'базовое имя' ] . '" /c "cmd /c echo @fsize"' );
if( $fz != $fx ) < return $fx ; >
вернуть $fz ;
>

// Быстрый пример для проверки возвращаемого значения, чтобы отличить 0-байтовый файл от неудачного вызова функции png()

$size = размер файла ("some.file");

if ( $size === FALSE ) echo "размер файла недоступен" ;
> else echo "какой-то файл имеет длину $size байт" ;
>

// Более короткая версия, немного другая
if ( ( $size = размер файла ("some.file" )) !== FALSE )
echo "some.file имеет длину $size байт" ;
?>

Это обновленная версия моего предыдущего файла png2bytes.
Теперь возвращаемый тип действительно int.

$bytes_array = array(
'B' => 1 ,
'KB' => 1024 ,
'MB' => 1024 * 1024 ,
'GB' => 1024 * 1024 * 1024 ,
'ТБ' => 1024 * 1024 * 1024 * 1024 ,
'ПБ' => 1024 * 1024 * 1024 * 1024 * 1024 ,
);

$bytes = floatval ( $str );

$bytes = intval (округление ( $bytes , 2 ));

Вот очень быстрый и надежный способ получить размер больших файлов > 2 Гб на 32-битных и 64-битных платформах.

эта функция перехватывает ответ, содержащий заголовок Location, и рекурсивно отправляет запрос HEAD на хост, на который мы перемещаемся, пока не будет получен окончательный ответ.
(Вы можете часто сталкиваться с такими перенаправлениями при загрузке чего-либо из php-скриптов или некоторых хеш-ссылок, которые используют apache mod_rewrite. Большинство мастеров загрузки правильно обрабатывают 302 перенаправления, поэтому этот код тоже делает это (рекурсивно работает через 302 перенаправления). )

[$counter302] укажите, сколько раз вы разрешаете переход этой функции, если выполняются перенаправления. Если начальный лимит (по умолчанию 5) истек -- он возвращает 0 (должно быть изменено для ваших целей). .

функция remote_filesize_thru ($ipAddress, $url, $counter302 = 5)
<
$socket = fsockopen ("10.233.225.2", 8080);
if( ! $socket )
<
// не удалось открыть TCP-сокетное соединение
// делаем здесь что-то разумное, кроме выхода();
echo "
не удалось открыть сокет для [ $ipAddress ]" ;
выход();
>

// просто отправляем запрос HEAD на сервер
$head = "HEAD $url HTTP/1.0\r\nConnection: Close\r\n\r\n" ;
// вместо этого вы можете использовать HTTP/1.1, тогда строка заголовка вашего запроса _должна_ содержать заголовок "Host:"
fwrite ( $socket , $head );

// читаем заголовок ответа
$header = ReadHeader ( $socket );
if( ! $header )
<
// обработайте здесь пустой ответ так, как вам нужно.
Заголовок ("HTTP/1.1 404 не найден");
выход();
>

// проверяем заголовок "Location"
$locationMarker = "Location: " ;
$pos = strpos ( $header , $locationMarker );
if( $pos > 0 )
<
$counter302 --;
if( $counter302 0 )
<
// лимит редиректов (по умолчанию 5) истек -- верните какое-нибудь предупреждение или сделайте что-нибудь толковое здесь
echo "warning: too long redirecting последовательность" ;
возврат 0 ;
>

// Местоположение присутствует -- мы должны определить целевой хост и переместиться туда, как это делают любые мастера загрузки.
// здесь не нужно использовать регулярное выражение
$end = strpos ( $header , "\n" , $pos );
$location = trim (substr ($header, $pos + strlen ($locationMarker), $end - $pos - strlen ($locationMarker)), "\\r\\n");

// извлекаем чистый хост (без "http://")
$host = Explosion ("/" , $location );
$ipa = gethostbyname ( $host [ 2 ] );
// переходим в Location
return remote_filesize_thru ( $ipa , $location , $counter302 );
>

// пытаемся получить Content-Length в ответе
$regex = '/Content-Length:\s(4.+?)\s/' ;
$count = preg_match ($regex, $header, $matches);

// если было поле Content-Length, его значение
// теперь будет в $matches[1]
if( isset( $matches [ 1 ] ) )
$size = $match [ 1 ];
иначе
$size = 0 ;

Каждый файл на компьютере использует определенное количество ресурсов при отправке через Интернет или сохранении. Помня о своих килобайтах (КБ) и мегабайтах (МБ), вы можете предотвратить проблемы и обеспечить более плавную работу в Интернете. Это руководство GreenNet поможет вам отличить китов от пескарей.

Компьютерные ресурсы имеют физические пределы своих возможностей, даже если идею компьютерных ресурсов можно масштабировать до бесконечности. Поэтому мы действительно хотим думать о размерах файлов аккуратно, минималистично и, таким образом, максимально использовать ресурсы, которые у нас уже есть. Хотя большинство людей в настоящее время, кажется, имеют подключение к Интернету, которое легко справляется с аудио, видео и изображениями с высоким разрешением, стоит помнить, что многие люди этого не делают.Если не позаботиться, можно создать большой мультимедийный файл, который на самом деле передает людям не больше информации, чем файл в десятую или сотую часть размера.

Программные пакеты, которые потребляют слишком много памяти и места на диске для выполнения своих функций, иногда называют "раздутыми программами", и аналогичную эстетику можно применить к медиафайлам. Например, размещение расшифровок на веб-сайте может помочь людям быстрее находить нужную им информацию, чем только аудио- или видеоинтервью. Точно так же вы можете подумать, будет ли людям, в том числе с нарушениями зрения, проще прочитать дату и время события из текстового сообщения электронной почты или открыть большой PDF-файл или файл изображения плаката. (Кстати, термин Microsoft «документ» для файлов так и не прижился. В данном контексте эти два слова являются синонимами.)

Итак, насколько большим является слишком большой? Очевидно, это зависит от контекста. Если вы подписываете отчет, который предназначен для печати, то вполне разумно отправить по электронной почте вложение в формате PDF размером 10 МБ нескольким людям с просьбой дать окончательные комментарии. Что было бы неразумно, так это отправить готовый 10-мегабайтный файл по электронной почте вашему списку из 2000 сторонников. Вместо этого вы можете создать версию PDF с более низким разрешением или даже текстовую версию, разместить ее на своем веб-сайте и отправить по электронной почте ссылку на файл, возможно, с небольшим указанием размера файла (например, «[1,2 МБ PDF] ") рядом со ссылкой для скачивания.

Зачем беспокоиться о размере файла, если человеку с высокоскоростным широкополосным доступом в Интернет требуется всего 15 секунд, чтобы загрузить файл размером 10 МБ?

Несмотря на то, что у некоторых людей загрузка может занять 15 секунд (например, широкополосный доступ GreenNet ADSL2+ со скоростью "до" 12 Мбит/с), 10 % домашних интернет-соединений в Великобритании по состоянию на 2009 год по-прежнему осуществляются с коммутируемым доступом, во многих других странах этот показатель выше. . Загрузка 10 МБ по телефонной линии может занять около часа. При более старых широкополосных соединениях или в сельской местности скорость загрузки может составлять 512 кбит/с, а передача по-прежнему занимает несколько минут. Даже при самом быстром широкополосном доступе скорость загрузки часто ограничена 256 кбит/с, поэтому, если вы ожидаете повторной передачи файла размером 10 МБ, это, скорее всего, будет медленнее, чем ожидалось.

Большой файл сам по себе не представляет проблемы, но если его умножить на размер аудитории, это может привести к проблемам с пропускной способностью, которые повлияют на интернет-провайдеров и других пользователей. Передача также потребляет большее количество энергии, что может привести к необходимости модернизации аппаратной части (до 80% энергии за время жизни компьютерной техники «воплощается», то есть при ее изготовлении). GreenNet не ограничивает пропускную способность, но подчиняется политике «добросовестного использования».

После загрузки большие файлы труднее манипулировать. Большие электронные письма могут замедлить доступ к почтовому ящику и увеличить размер файлов почтовых ящиков на компьютерах получателей. Большие файлы изображений на веб-странице часто должны масштабироваться программным обеспечением браузера, а это означает, что навигация и прокрутка страницы могут быть медленными и беспорядочными. (Есть и другие факторы, которые могут вызвать медленную "отрисовку" страницы, например, Javascript или сложная "внутренняя часть" веб-сайта.)

Тогда есть резервная копия. Если кто-то намеревается сохранить документ или изображение или заархивировать всю электронную почту, он может быть многократно реплицирован на резервном носителе. Люди также могут не захотеть хранить файлы, которые занимают больше памяти, чем они того стоят, и поэтому удаляют их.

Это все еще 15 секунд, даже если это фоновая загрузка. Некоторым из нас не терпится дождаться компьютера более полсекунды.

Что на самом деле означает каждая единица памяти компьютера?

Короче говоря, префиксы "кило-", "мега-", "гига-" и "тера-" аналогичны их использованию в любых других единицах измерения, таких как метры или ватты:

  • 1 Б = 1 байт;
  • 1 КБ = 1000 байт;
  • 1 МБ = 1000 КБ;
  • 1 ГБ = 1000 МБ или 1 000 000 000 байт.

(Чтобы запутать ситуацию, «1 КБ» или «1 КБ» используются многими компьютерщиками для обозначения 1024 байтов, что является удобным числом в двоичном формате, а память или диск часто выделяются операционными системами в единицах 1024. Чтобы избежать этой путаницы со стандартным научным использованием «мега-» и т. д., термины «кибибайт» (КиБ), «мебибайт» (МиБ), «гибибайт» (ГиБ) и «тебибайт» теперь рекомендуются для этих не- десятичных технических единиц. Если вы купили флэш-накопитель на 4 ГБ, а его объем составляет всего 3,725 ГиБ, вы все равно можете почувствовать себя обделенным. Для простоты в этой статье мы будем использовать круглые тысячи и килобайты [кБ].)

Как посмотреть размеры файлов?

Размер файла или вложения обычно легко доступен, если он еще не заметен. В Windows щелчок правой кнопкой мыши на любом файле, папке или диске и выбор «Свойства» покажет размер. В окне Проводника вы можете выбрать «Подробности» в меню «Вид»; или в диалоговом окне открытия или сохранения файла есть кнопка «Просмотр», из которой вы также можете выбрать «Подробности».Если вы затем нажмете слово «Размер» в верхней части столбца, вы можете сгруппировать самые большие файлы в папке. В Mac OS X можно нажать Command+i, чтобы отобразить сведения об отдельном файле, или Command+Option+i, чтобы отобразить сведения обо всех выбранных элементах в окне Инспектора. Эквивалент представления «Подробности» для Mac — это представление «Список», а сочетание клавиш Command+J дает возможность «рассчитать все размеры» как папок, так и файлов.

Большинство почтовых программ, таких как Windows Mail или Thunderbird, всегда отображают размер вложений рядом с именем файла. В Thunderbird (и многих других программах) вы можете нажать кнопку столбцов в правом верхнем углу списка, чтобы добавить столбец, показывающий размер каждого элемента. FTP-программы, используемые для передачи файлов на веб-сайты, почти все показывают размер файлов по умолчанию, хотя обычно в байтах, поэтому вам нужно разбить эти большие числа на глаз на группы из трех цифр, чтобы увидеть, какие из них измеряются в B или kB, а который в МБ.

Таблица приблизительных размеров файлов

Трехминутный звук в формате MP3 с очень высоким битрейтом (256 кбит/с);
1 минута видео в низком разрешении или потокового видео с сайта обмена видео;
все опубликованные файлы кабельного шлюза Wikileaks к середине декабря 2010 г.;
20-страничный PDF-файл, который может включать неудачно выбранную обложку;
полное собрание сочинений Шекспира (без сжатия)

Изображения

Как вы уже поняли, одним из основных факторов, определяющих громоздкость файла, является качество или разрешение изображений. Изображение с разрешением 300 dpi (точек или пикселей на дюйм), добавленное в текстовый процессор или файл PDF, занимает примерно в четыре раза больше места, чем изображение с разрешением 150 dpi (поскольку разрешение применяется как по горизонтали, так и по вертикали). Теперь, если вам нужно поделиться изображением с кем-то в Интернете, либо на веб-сайте, либо по электронной почте, и вы не ожидаете, что он распечатает его, а также не ожидаете идеальной копии или увеличения для изучения мельчайших деталей, тогда это будет только быть показаны на экране. Так что стоит немного узнать о разрешениях экрана. Типичный плоский экран имеет ширину 1280 пикселей. Тем не менее, некоторые из них могут иметь меньшее или более низкое разрешение, и с учетом навигационных панелей и полей по бокам экрана, а также того, что веб-браузер посетителя может не занимать весь экран, вероятно, нет особого смысла в загрузке изображения, которое шире 800 пикселей. Все, что больше, и зритель может видеть только верхний левый угол изображения и должен прокручивать, чтобы увидеть остальное.

Отсканированные или цифровые фотографии могут быть в 20 раз больше, но при этом не казаться более четкими для получателя. Поэтому, если у вас есть такое изображение, вам нужно будет изменить его размер или уменьшить перед загрузкой или публикацией. Распространенной ошибкой при создании веб-страницы является попытка изменить размер изображения на странице путем изменения свойств элемента изображения. Некоторые системы управления контентом, такие как Drupal, могут включать в себя модуль изображения, который автоматически создает масштабированную копию изображения указанного вами размера, но если вы редактируете страницы в веб-программах, таких как Dreamweaver или KompoZer, шансы вы вынуждаете каждого посетителя веб-сайта загружать слишком много информации, а затем заставляете их компьютер работать очень усердно, выполняя уменьшение масштаба. Поэтому лучше стараться, чтобы фотоизображения, даже баннеры, не превышали 800 пикселей в поперечнике и, возможно, не превышали 50 КБ. Любое программное обеспечение для редактирования изображений, такое как GIMP с открытым исходным кодом, позволяет легко создавать файлы меньшего размера. Просто откройте большой файл, выберите функцию "размер изображения" или "масштабирование изображения", выберите нужную ширину, помня, что 800 пикселей часто соответствует полной ширине, и сохраните файл в подходящем формате.

Еще одна вещь, которую следует учитывать при работе с изображениями, – это различные преимущества различных видов сжатия и форматов файлов. Как упоминалось выше, файлы JPEG (также называемые файлами .jpg, потому что Windows когда-то была ограничена 3-символьными расширениями) чаще всего используются для фотографии, а формат JPEG используется почти во всех цифровых камерах. Они сохраняют полный диапазон цветов, но теряют определенное количество мелких деталей; существует баланс между размером файла и допустимым количеством искажений. Высокосжатый JPEG может иметь эффект интерференции Фурье, но большинство людей этого не заметят. В основном вам понадобится качество JPEG среднего уровня около 50 (из 100). Другими основными форматами, используемыми в Интернете, являются PNG или более старый GIF, и это форматы «без потерь», которые не подходят для фотографий или полноцветных сканирований произведений искусства. Однако для таких изображений, как штриховые рисунки или логотипы, которые были созданы на компьютере, выбор PNG позволяет очень эффективно сжимать области плоского цвета и сохранять четкие края дизайна, которые потеряет JPEG. PNG также имеет тенденцию использоваться для небольших изображений, поскольку для больших изображений гораздо важнее уменьшение размера за счет использования JPEG. Следующие изображения иллюстрируют, почему JPG не используется для небольших файлов с небольшим количеством цветов:

Office 365 профессиональный плюс переименовывается в Приложения Microsoft 365 для предприятий.Для получения дополнительной информации об этом изменении прочитайте эту запись в блоге.

В этой статье перечислены ограничения рабочих параметров Microsoft Office Word и Microsoft Visual Basic для приложений.

Ограничения Visual Basic для приложений

Ограничение на количество слов

Примечание 1. Максимальный размер файла

Максимальный размер файла ограничен 32 МБ только для всего текста документа и не включает графику, независимо от того, как графическое изображение вставлено в документ (ссылка на файл, сохранение с документом или стиль переноса). Поэтому, если файл содержит графику, максимальный размер файла может превышать 32 МБ.

Примечание 2. Количество слов и максимальный размер файла пользовательского словаря

В файле справки Microsoft Word 2000 неверно указано количество слов и максимальный размер файла пользовательского словаря.

Примечание 3. Чтобы вызвать подсказки автозаполнения для автотекста, необходимо ввести не менее четырех символов записи автотекста.

Ограничения Word 2007 и более поздних версий

Рабочий параметр Ограничение
Максимальное количество закладок 2 147 483 647
(Определение стиля) максимальное количество стилей 4079
Максимальное количество списков 2 047
Максимальное количество комментариев 2 147 483 647
Максимальное количество полей 2 147 483 647
Количество вложенных документов в мастер-документе 255
Максимальное количество ходов 2 147 483 647
(Разрешение на диапазон) максимально допустимое количество 2 147 483 647
Размер файла, который Word может открыть 512 МБ
Максимальное количество записей для отображения в диалоговом окне списка получателей 10 000
Максимальный размер бумаги 22" x 22"

Максимум 10 000 для диалогового окна списка получателей. Если вы выполняете поиск в этом диалоговом окне, вы ограничены отображаемыми записями, даже если в вашем источнике данных больше записей. Обходной путь — отфильтровать записи, чтобы те записи, которые вы ищете, помещались в диалоговом окне. Другой обходной путь — использовать операцию «Найти» на панели задач мастера.

Word 2007 и более поздние версии в ограничениях режима совместимости

Рабочий параметр Ограничение
Максимальное количество закладок 16 380
(Определение стиля) максимальное количество стилей 4 079
Максимальное количество списков 2 047
Максимальное количество комментариев 16 380
Количество вложенных документов в основном документе 255
Максимальное количество полей 2 147 483 647
Максимальное количество ходов 32 752
(Разрешение на диапазон) максимально допустимое количество 32 752
Размер файла, который Word может открыть 512 МБ
Максимальное количество записей для отображения в диалоговом окне списка получателей 10 000
Максимальный размер бумаги 22" x 22"

Примечание 4. Ограничение в 32 767 – для версий, предшествующих Word 2007.

Примечание 5. Количество записей, отображаемых в диалоговом окне списка получателей

Вы можете отображать не более 10 000 записей, даже если в вашем источнике данных больше записей. Чтобы обойти это ограничение, отфильтруйте записи, чтобы они помещались в диалоговом окне, или используйте операцию поиска на панели задач мастера.

В этой статье обсуждается, как проверить выделение дискового пространства в файловой системе NTFS, чтобы обнаружить проблемные файлы и папки или найти повреждение тома на компьютерах под управлением Microsoft Windows Server 2003.

Применимо к: Windows Server 2003
Исходный номер базы знаний: 814594

Обзор

NTFS поддерживает множество функций на уровне томов и файлов, которые могут привести к потере свободного места на диске или неправильной информации о нем. Например, том NTFS может внезапно оказаться заполненным без всякой причины, и администратор не может найти причину или найти проблемные папки и файлы. Это может произойти, если произошел злонамеренный или несанкционированный доступ к тому NTFS, на котором тайно скопированы большие файлы или большое количество маленьких файлов. Затем для этих файлов удаляются или ограничиваются разрешения NTFS. Такое поведение также может возникать после сбоя компьютера или отключения питания, что приводит к повреждению тома.

Распределение дискового пространства для тома NTFS может оказаться неправильным по любой из следующих причин:

  • Размер кластера тома NTFS слишком велик для хранящихся там файлов среднего размера.
  • Атрибуты файлов или разрешения NTFS не позволяют Проводнику Windows или командной строке Windows отображать или получать доступ к файлам или папкам.
  • Путь к папке превышает 255 символов.
  • Папки или файлы содержат недопустимые или зарезервированные имена файлов.
  • Метафайлы NTFS (такие как главная таблица файлов) увеличились, и их нельзя отменить.
  • Файлы или папки содержат альтернативные потоки данных.
  • Повреждение файловой системы NTFS приводит к тому, что свободное пространство отображается как используемое.
  • Другие функции NTFS могут вызвать путаницу при размещении файлов.

Следующая информация может помочь вам оптимизировать, восстановить или лучше понять, как ваши тома NTFS используют дисковое пространство.

Размер кластера слишком велик

Только файлы и папки, содержащие внутренние метафайлы NTFS, такие как основная таблица файлов (MFT), индексы папок и другие, могут занимать место на диске. Эти файлы и папки потребляют все выделенное файловое пространство, используя несколько кластеров. Кластер — это совокупность смежных секторов. Размер кластера определяется размером раздела при форматировании тома.

При создании файла он занимает как минимум один кластер дискового пространства, в зависимости от исходного размера файла. Когда данные позже добавляются в файл, NTFS увеличивает размер файла, кратный размеру кластера.

Чтобы определить текущий размер кластера и статистику тома, запустите команду chkdsk только для чтения из командной строки. Для этого выполните следующие действия:

Нажмите "Пуск", выберите "Выполнить", введите cmd и нажмите "ОК".

В командной строке введите команду: chkdsk d: .

Где d: буква диска, который вы хотите проверить.

Нажмите "ОК".

Просмотрите результат. Например:

4096543 КБ всего места на диске. /a переключатель, чтобы указать соответствующее распределение. Например: формат D: /a:2048 (в этом примере используется размер кластера 2 КБ).

Кроме того, вы можете включить сжатие NTFS, чтобы восстановить пространство, потерянное из-за неправильного размера кластера. Однако это может привести к снижению производительности.

Атрибуты файла или разрешения NTFS

Проводник Windows и команда списка каталогов dir /a /s отображают общую статистику файлов и папок только для тех файлов и папок, на доступ к которым у вас есть права доступа. По умолчанию скрытые файлы Files и защищенные системные файлы исключаются. Такое поведение может привести к тому, что Проводник Windows или команда dir будут отображать неточные общие данные о файлах и папках и статистику о размерах.

Чтобы включить эти типы файлов в общую статистику, измените параметры папки. Для этого выполните следующие действия:

  1. Нажмите «Пуск», выберите «Мой компьютер», а затем дважды щелкните букву диска (например, D) тома. Это открывает том и отображает папки и файлы, содержащиеся в корневом каталоге.
  2. В меню "Инструменты" нажмите "Параметры папки", а затем перейдите на вкладку "Вид".
  3. Установите флажок "Показать скрытые файлы и папки", а затем снимите флажок "Скрывать защищенные системные файлы".
  4. Нажмите «Да», когда получите предупреждающее сообщение, а затем нажмите кнопку «Применить». Это изменение позволяет Проводнику Windows и команде dir /a /s суммировать все файлы и папки, содержащиеся в томе, к которым у пользователя есть права доступа.

Чтобы определить папки и файлы, к которым у вас нет доступа, выполните следующие действия:

В командной строке создайте текстовый файл из выходных данных команды dir /a /s.

Например: в командной строке введите следующую команду: dir d: /a /s >c:\d-dir.txt .

Запустите мастер резервного копирования или восстановления.

Нажмите «Параметры» в меню «Инструменты», перейдите на вкладку «Журнал резервного копирования», нажмите «Подробно» и нажмите «ОК».

В утилите резервного копирования перейдите на вкладку «Резервное копирование», затем установите флажок для всего затрагиваемого тома (например, D:), а затем нажмите «Начать резервное копирование».

После завершения резервного копирования откройте отчет о резервном копировании и сравните папку для папки выходных данных журнала NTBackup с выходными данными d-dir.txt, сохраненными на шаге 1.

Поскольку резервное копирование может получить доступ ко всем файлам, его отчет может содержать папки и файлы, которые не отображаются проводником Windows и командой dir. Возможно, вам будет проще использовать интерфейс NTBackup для поиска тома без резервного копирования тома, когда вы хотите найти большие файлы или папки, к которым вы не можете получить доступ с помощью проводника Windows.

После того, как вы найдете файлы, к которым у вас нет доступа, вы можете добавить или изменить разрешения с помощью вкладки "Безопасность" во время просмотра свойств файла или папки в проводнике Windows. По умолчанию вы не можете получить доступ к папке System Volume Information. Вы должны добавить правильные разрешения, чтобы включить папку в команду dir /a /s.

Вы можете заметить папки или файлы, у которых нет вкладки "Безопасность". Или вы не сможете переназначить разрешения для затронутых папок и файлов. При попытке доступа к ним может появиться следующее сообщение об ошибке:

D:\имя_папки\ недоступен

Доступ запрещен

Если у вас есть такие папки, обратитесь за дополнительной помощью в службу поддержки продуктов Microsoft.

Недопустимые имена файлов

Папки или файлы, которые содержат недопустимые или зарезервированные имена файлов, также могут быть исключены из статистики файлов и папок. Папки или файлы, содержащие начальные или конечные пробелы, допустимы в NTFS, но недопустимы с точки зрения подсистемы Win32. Поэтому ни проводник Windows, ни командная строка не могут с ними надежно работать.

Возможно, вы не сможете переименовать или удалить эти файлы или папки. При попытке сделать это может появиться одно из следующих сообщений об ошибке:

Ошибка переименования файла или папки

Невозможно переименовать файл: невозможно прочитать исходный файл или диск.

Ошибка удаления файла или папки

Невозможно удалить файл: невозможно прочитать исходный файл или диск.

Если у вас есть папки или файлы, которые вы не можете удалить или переименовать, обратитесь в службу поддержки продуктов Microsoft.

Расширение главной таблицы файлов NTFS (MFT)

При создании и форматировании тома NTFS создаются метафайлы NTFS. Один из этих метафайлов называется главной таблицей файлов (MFT). При создании он небольшой (примерно 16 КБ), но увеличивается по мере создания на томе файлов и папок. Когда файл создается, он вводится в MFT как сегмент записи файла (FRS). FRS всегда составляет 1024 байта (1 КБ). По мере добавления файлов в том MFT увеличивается. Однако при удалении файлов связанные FRS помечаются как свободные для повторного использования, но общее количество FRS и соответствующее распределение MFT остаются. Вот почему вы не восстанавливаете пространство, используемое MFT, после удаления большого количества файлов, .

Чтобы точно определить размер MFT, можно использовать встроенный дефрагментатор для анализа тома. Результирующий отчет предоставляет подробную информацию о размере и количестве фрагментов в MFT.

Фрагментация основной таблицы файлов (MFT)
Общий размер MFT = 26 203 КБ
Количество записей MFT = 21 444
Процент использования MFT = 81 %
Общее количество фрагментов MFT = 4

Однако для получения более полной информации о том, сколько места (накладных расходов) использует вся NTFS, запустите команду chkdsk.exe, а затем просмотрите вывод для следующей строки:

В настоящее время только сторонние программы дефрагментации объединяют неиспользуемые записи MFT FRS и освобождают неиспользуемое пространство, выделенное MFT.

Альтернативные потоки данных

NTFS позволяет файлам и папкам содержать альтернативные потоки данных. С помощью этой функции вы можете связать несколько распределений данных с одним файлом или папкой. Использование альтернативных потоков данных для файлов и папок имеет следующие ограничения:

  • Проводник Windows и команда dir не сообщают данные в альтернативных потоках данных как часть статистики размера файла или объема. Вместо этого они показывают только общее количество байтов для основного потока данных.
  • Выходные данные chkdsk точно сообщают о пространстве, занимаемом файлами данных пользователя, включая альтернативные потоки данных.
  • Дисковые квоты точно отслеживают и сообщают обо всех выделениях потока данных, которые являются частью файлов данных пользователя.
  • NTBackup записывает количество резервных копий в байтах в отчете журнала резервного копирования. Однако он не показывает, какие файлы содержат альтернативные потоки данных. Также не отображаются точные размеры файлов, содержащих данные в альтернативных потоках.

Повреждение файловой системы NTFS

В редких случаях метафайлы NTFS $MFT или $BITMAP могут быть повреждены, что приведет к потере места на диске. Вы можете определить и устранить эту проблему, выполнив команду chkdsk /f для тома. Ближе к концу chkdsk вы получите следующее сообщение, если вам необходимо настроить $BITMAP: исправление ошибок в атрибуте BITMAP таблицы основных файлов (MFT). CHKDSK обнаружил свободное пространство, помеченное как выделенное в растровом изображении тома. Windows внесла исправления в файловую систему.

Другие функции NTFS, которые могут вызвать путаницу при размещении файлов

NTFS также поддерживает жесткие ссылки и точки повторной обработки, которые позволяют создавать точки подключения томов и соединения каталогов. Эти дополнительные функции NTFS могут вызвать путаницу при попытке определить, сколько места занимает физический том.

Жесткая ссылка – это запись в каталоге для файла независимо от того, где на этом томе находятся данные файла. Каждый файл имеет хотя бы одну жесткую ссылку. В томах NTFS каждый файл может иметь несколько жестких ссылок, поэтому один файл может находиться во многих папках (или даже в одной папке с разными именами). Поскольку все ссылки относятся к одному и тому же файлу, программы могут открыть любую из ссылок и изменить файл. Файл удаляется из файловой системы только после удаления всех ссылок на него. После создания жесткой ссылки программы могут использовать ее как любое другое имя файла.

Проводник Windows и командная строка показывают, что все связанные файлы имеют одинаковый размер, несмотря на то, что все они используют одни и те же данные и фактически не используют такой объем дискового пространства.

Точки подключения тома и точки пересечения каталогов позволяют пустой папке на томе NTFS указывать на корень или подпапку на другом томе. Проводник Windows и команда dir /s следуют за точкой повторной обработки, подсчитывают все файлы и папки на целевом томе, а затем включают их в статистику основного тома. Это может ввести вас в заблуждение, полагая, что на хост-томе используется больше места, чем используется на самом деле.

Подводя итог, можно использовать выходные данные chkdsk, графический интерфейс NTBackup или журналы резервного копирования, а также просмотр дисковых квот, чтобы определить, как дисковое пространство используется на томе. Однако проводник Windows и команда dir имеют некоторые ограничения и недостатки при использовании для этой цели.

Читайте также: