С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
VadimuSSS
2 / 2 / 0
Регистрация: 23.06.2014
Сообщений: 167
1

Как корректно работать с функцией fread?

01.03.2016, 21:25. Просмотров 210. Ответов 4
Метки нет (Все метки)

Мне необходимо считать информацию из одной директории, а потом поместить эту же информацию в другую директорию(скопировать). Возникла проблема с функцией fread. Я получаю доступ к директории, после чего нахожу первый файл, находящийся в ней. Как правильно будет поместить данный файл в буфер? Я совершенно не понимаю какого типа должен быть данный буфер. В синтаксисе ф-ии указан void* buffer и я в душе не пойму как это понимать? я помещал туда и буфер с типом char и double, но все время указывалось, что данный тип не совместим с void*.
Так же я не пойму назначения второго и третьего аргумента. Данные в директории у меня разного плана, картинки, текстовые файлы и т.д. Если допустим необходимо считать картинку как это сделать? Был бы признателен, если бы меня направили в нужном направлении, т.к. пока что я в ступоре.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2016, 21:25
Ответы с готовыми решениями:

Как работать с функцией rand()
Помогите сделать так, чтобы rand() каждый раз выкидывал неповторяющиеся...

Как работать с функцией memchr( ) в С++
Помогите пожалуйста разобраться как работает функция memchr() в С++. Я...

Как работать с функцией SystemParametersInfo?
Чтобы установить обои рабочего стола. Пишу вот так: #include "stdafx.h"...

Как правильно работать с функцией _getch() ?
Ребята, задача такова: Надо нарисовать фигурку в консоли. И дигать ,по...

Как правильно работать с функцией window()?
Задача такая. Вывести в верхней части экрана небоольшой заголовок с менюшками....

4
Juffin
51 / 51 / 24
Регистрация: 24.12.2011
Сообщений: 133
01.03.2016, 21:42 2
Ему нужен char* с выделенной памятью или char[].

C++
1
2
3
4
FILE *stream;
char list[30];
...
numread = fread(list, sizeof(char), 25, stream);
1
nd2
2838 / 2405 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
01.03.2016, 23:53 3
Цитата Сообщение от VadimuSSS Посмотреть сообщение
Я получаю доступ к директории, после чего нахожу первый файл, находящийся в ней. Как правильно будет поместить данный файл в буфер?
По ссылке есть пример: http://www.cplusplus.com/reference/cstdio/fread/
Цитата Сообщение от VadimuSSS Посмотреть сообщение
Данные в директории у меня разного плана, картинки, текстовые файлы и т.д. Если допустим необходимо считать картинку как это сделать?
Функциям бинарного чтения/записи безразлично содержимое файлов, они оперируют байтами.

Добавлено через 6 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdlib.h>
#include <stdio.h>
 
int main()
{
    FILE * fd = fopen( "input.txt", "rb" );
 
    if( !fd )
    {
        fputs( "Could not open file for read - check if the file exists and if you have permission to read it.", stderr );
        return -1;
    }
 
    // перемотать на конец файла
    fseek( fd, 0, SEEK_END );
 
    // получить размер файла
    long file_size = ftell( fd );
 
    // буфер под весь файл
    char * buffer = (char*) malloc( file_size );
 
    if( !buffer )
    {
        fclose( fd );
        fputs( "Could not allocate memory for file buffer. File could be empty or too large.", stderr );
        return -1;
    }
 
    // перейти на начало файла
    fseek ( fd , 0, SEEK_SET );
 
    if( file_size != fread( buffer, 1, file_size, fd ) )
    {
        free( buffer );
        fclose( fd );
        fputs( "Read data size is not equal to actual file size.", stderr );
        return -1;
    }
 
    fclose( fd );
 
    // файл теперь в памяти 
    // вывести, например, его на stdout
    puts( buffer );
 
    free( buffer );
 
    return 0;
}
1
VadimuSSS
2 / 2 / 0
Регистрация: 23.06.2014
Сообщений: 167
06.03.2016, 00:48  [ТС] 4
Juffin, что значит аргумент "25"? и почему там именно 25?
nd2, почему-то при использовании ф-ии fread код заходит в тело ифа. Значит произошла ошибка? все сделал по вашему примеру.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
            if ((theFile = fopen(tempWayToFile.c_str(), "rb")) == 0) // tempWayToFile instead from
            {
                cout << "Problem with file opening\n";
                return 0;
            }
            else
                cout << tempWayToFile << " - opened successfuly\n";
 
            fseek(theFile, 0, SEEK_END);
            long fileSize = ftell(theFile);
 
 
            char* buffer = (char*) malloc(fileSize);
            
                if ((fread(buffer, 1, fileSize, theFile)) != fileSize)
                {
                    cout << "Error in writing file to buffer";
                    free(buffer);
                    fclose(theFile);
                }
Добавлено через 9 минут
Проблема предыдущего сообщения была в том, что был достигнут конец файла. Было необходимо установить укзатель в начало файла при помощи ф-ии fseek и только потом использовать fread. Теперь надо разобраться как поместить данные из буфера в новосозданный файл...
0
nd2
2838 / 2405 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
06.03.2016, 00:55 5
Цитата Сообщение от VadimuSSS Посмотреть сообщение
Теперь надо разобраться как поместить данные из буфера в новосозданный файл...
http://www.cplusplus.com/reference/cstdio/fwrite/
1
06.03.2016, 00:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2016, 00:55

Не выходит корректно работать с fstream
смысл программы: она открывает файл, как только видит значок комментариев с++...

Насколько корректно будет работать замыкание?
Мой друг-JS'ер бросил мне очередной челлендж. В этот раз он мне предложил...

Корректно ли будет работать функция realloc в пользовательском классе массива
Доброго времени суток. Корректно ли будет работать функция realloc в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru