Меню
Категории
Задача определения размера файла на C++
10 марта, 2008 Программинг

Задача определения размера файла на C++. Для определения размера файла, в данном стучае, самого себя. Нужно узнать путь к себе. Затем открыть файл на чтение, переместить указатель на первый байт, и считываит каждый последовательный байт прибавляю единицу к счетчику размера файла. Сколько единиц будет у счетчика, когд аон доберется до конца файла, столько и будет байт в файле.

Ниже приведены примеры для Visual C++ и Borland C++ Builder.

#include <stdio.h>
#include <windows.h>

WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
char virname[256];
char Buffer_v[VZ];
char kas[50];
FILE *f,*fp;

GetModuleFileName(hInstance, virname, 256);
f = fopen(virname,”rb”);
fseek(f,0,SEEK_END);
int size = ftell(f);

itoa(size,kas,10);
strcat(kas,” – size”);
MessageBox(0,kas,0,0);

return 0;
}

И второй вариант.

#pragma hdrstop
#include <stdio.h>
#include <io.h>
#include <iostream.h.h>
#pragma argsused
int file_size(char *name);

int main(int argc, char* argv[])
{
int sss = 0;

sss = file_size(“c:\\6.txt”);
cout<<sss;
getchar();
return 0;
}
int file_size(char *name)
{
int size=0;
char tmp;

FILE *d = fopen(name,”r”);

do
{
tmp = fgetc(d);

if (tmp == ‘\0’) continue;
size++;
}while (tmp != EOF);
return size-1;
}

3 комментария
  1. Во втором примере правильней будет так:
    long file_size(char *name)
    {
    int size=0;
    char tmp;

    FILE *d = fopen(name,”r”);
    do
    {
    tmp = fgetc(d);

    if (tmp == ”)
    continue;

    size++;
    }while (!feof(d));
    fclose(d); // закрытие файла
    return size-1;
    }

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

    file_name.seekg(0, ios::end);

    и получить текущую позицию указателя:

    size = file_name.tellg();

    вот вам и размер.

  3. Проблема только в том, что размеры в первом и втором варианте не совпадают – как раз на количество переводов строк.
    Это если текстовый файл создан, например, в Notepad-е. Т.е. если перевод строк это два символа.

Добавить комментарий




*