Два одинаковых файла имеют разный размер в байтах?

161
01 октября 2021, 12:10

В директории имеется два одинаковых текстовых файла: SomeTxtFile1 и SomeTxtFile2 - оба весом в 1 кб (отображается в проводнике)

При проверке вот таким кодом:

ifs1.open("SomeTxtFile1", ios::binary);
ifs2.open("SomeTxtFile2", ios::binary);
  int file1Length, file2Length;
  if (ifs1.is_open() && ifs2.is_open())
  {
      ifs1.clear();
      ifs2.clear();
      ifs1.seekg(0, ios::end);
      file1Length = ifs1.tellg();
      ifs2.seekg(0, ios::end);
      file2Length = ifs2.tellg();
      ifs1.clear();
      ifs2.clear();
      if (file1Length == file2Length)
      {
          ifs1.clear();
          ifs2.clear();
          ifs1.seekg(0, ios::beg);
          ifs2.seekg(0, ios::beg);
          char* file1Data = new char[file1Length];
          char* file2Data = new char[file2Length];
          ifs1.read((char*)& file1Data, file1Length);
          ifs2.read((char*)& file2Data, file2Length);
          int rowsCount = 0;
          for (int i = 0; i < file1Length; i++)
          {
             if (file1Data[i] == '\r\n')
             {
                rowsCount++;
             }
             if (file1Data[i] != file2Data[i])
             {
                cout << "в строке " + rowsCount;
             }
         }
     }
     else
     {
         cout << "разный размер файлов"<<endl;
     }
 }

file1Length1 - имеет размер 318, а file1Length2 - 314.

SomeTxtFile2 - побывал создавать и как копию SomeTxtFile1 и полностью заново - скопировав все содержимое SomeTxtFile1 - через ctrl+a.

Файлы лежат на одном разделе диска, в одной директории.

OS:Windows 8.1.

Answer 1

У файловой системы есть такой параметр, как размер кластера. Кластер - это минимальный объём, который может быть выделен на диске для файла. Например если файл занимает 1 байт, а размер кластера 4096 байт, то это файл займёт свободного пространства как раз на 4096 байт. Если же скопировать файл размером 1 байт на раздел, где размер кластера меньше, например 512, то такой файл займёт на нём меньше места. Если есть очень много мелких файлов, то они в совокупности займут меньше места на том диске, на котором меньше размер кластера. С другой стороны, чем больше размер кластера, тем быстрее операции ввода-вывода, а значит быстрее скорость их считывания и записи.

Видимо в вашей файловой системе при форматировании был указан размер кластера в 1kB.

READ ALSO
SVG Анимация постепенного появления stroke-dasharray

SVG Анимация постепенного появления stroke-dasharray

Спустя неоднократные попытки анимировать круг со свойством stroke-dasharray, придумал вариант вложенности circle в circle:

95
Управление SVG-координатами `path` с помощью JavaScript

Управление SVG-координатами `path` с помощью JavaScript

У меня есть path SVG со следующими точками в атрибуте d

78
Импорт модуля Node/JS, require/import, module/commonjs

Импорт модуля Node/JS, require/import, module/commonjs

Пытаюсь достучаться до импорта модулей

151