Познавательный блог  

Поиск по сайту

Гугль

Архивы

Задача определения размера файла на C++

Задача определения размера файла на 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;
}

Комментарии

Комментарий от Виталий [ Август 7, 2009, 12:12 ]

Во втором примере правильней будет так:
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;
}

Комментарий от SkAm [ Сентябрь 27, 2009, 12:37 ]

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

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

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

size = file_name.tellg();

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

Комментарий от andry [ Апрель 29, 2013, 05:39 ]

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

Написать комментарий








Страницы

Свежие записи

Гугль

Мета

Счетчики


Rambler's Top100

Рубрики

  Разработка и дизайн — StvPromo.ru