Задача определения размера файла на 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;
}
Во втором примере правильней будет так:
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;
}
Только если файл больше 500мб на определение его размера может уйти около минуты, что не есть хорошо.
Поэтому лучше после открытия переместить указатель в конец файла:
file_name.seekg(0, ios::end);
и получить текущую позицию указателя:
size = file_name.tellg();
вот вам и размер.
Проблема только в том, что размеры в первом и втором варианте не совпадают – как раз на количество переводов строк.
Это если текстовый файл создан, например, в Notepad-е. Т.е. если перевод строк это два символа.