Страницы

Поиск по вопросам

среда, 1 января 2020 г.

Как определить размер файла в программе на C?

#c


Нужно выделить память, равную размеру файла в байтах, под массив байтов и затем считать
файл в этот массив.    


Ответы

Ответ 1



Нужно использовать функцию fstat. #include #include #include #include #include #include #include int main() { void *buffer = NULL; int descriptor = open("filename", O_RDONLY); if (descriptor != -1) { FILE *file = fdopen(descriptor, "rb"); if (file) { struct stat statistics; if (fstat(descriptor, &statistics) != -1) { buffer = (char*)malloc(statistics.st_size); } fclose(file); } close(descriptor); } if (!buffer) { free(buffer); } return 0; }

Ответ 2



C, C++ Или можно сделать fseek на конец файла. А затем ftell для получения текущего положения курсора в файле. PS: при этом нужно быть аккуратным с файлами, размер которых превышает макс. значение для типа long. В этом случае можно воспользоваться 64-битными версиями ф-ций. PPS: для того, чтобы ftell вернул именно размер файла, нужно его открыть в бинарном режиме. C++ (w boost): #include #include using namespace boost::filesystem; int main(int argc, char* argv[]) { if (argc < 2) { std::cout << "Usage: tut1 path\n"; return 1; } std::cout << argv[1] << " " << file_size(argv[1]) << '\n'; return 0; }

Ответ 3



Возможно, не стоит париться, а посмотреть в сторону Memory Mapped Files (POSIX) и CreateFileMapping function (WIN)

Комментариев нет:

Отправить комментарий