#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)
Комментариев нет:
Отправить комментарий