@hauptling

Как прочитать файл по частям и записать в const char **?

Есть файл. Предположим его размер 50455 кб, мне нужно прочитать его полностью, но каждые 1024 кб записывать как const char *.
Как это лучше сделать?
Пишу под ubuntu, есть внутренний метод read, но с помощью него можно прочитать сразу весь файл, можно ли как-то сделать на момент чтения сразу формировать конечный массив из const char* ? Можно ли это сделать как-то корректно через fread?

Вот так я, например, читаю весь файл:
size_t filesize = (std::filesystem::file_size("путь"));
    char *buf = (char*) malloc(filesize);
    FILE *file = fopen("путь до файла", "b");
    fread(buf, 1, filesize, file);
    fclose(file);


что-то подобное для чтения по частям

char *inputData = malloc(dataLen);
    char *p = inputData;
    size_t bytesLeft = dataLen;
    while (bytesLeft) {
        size_t bytesRead = fread(p, 1, 1024, f);
        bytesLeft -= bytesRead;
        p += bytesRead;
        if (ferror(f) != 0) {
            fprintf(stderr, "ERROR: fread() failed\n");
            free(inputData);
            fclose(f);
  • Вопрос задан
  • 259 просмотров
Пригласить эксперта
Ответы на вопрос 2
Adamos
@Adamos
Ну, создаешь char** размером (dataLen + 1023) / 1024 и повторяешь этот код для чтения по частям, присваивая очередному элементу этого массива созданный char* размером 1024, в который считываешь такой кусок данных.
Ответ написан
@qwerty123123

fstream fs("13w87wmd.exe", std::ifstream::binary);
const int len = 1024;
char buff[len];
while(fs.readsome(buff, len)) {
cout << buff << endl;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы