Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Galenus
0 / 0 / 0
Регистрация: 18.12.2016
Сообщений: 12
#1

Аналоги методов работы с файлами из C в <fstream>C++ - C++

24.12.2016, 10:02. Просмотров 536. Ответов 5

Какие аналоги имеют f-ы из C(fread,fseek,ftell и т.д.) в библиотеке fstream в C++? Я знаю, что все f-ы работают в C++, но всё же моя цель - чтобы принимался путь типа string из <string>.

Например:
C++
1
2
3
4
5
6
7
8
9
10
#include <string>
#include <fstream>
 
int main()
 {
 string FilePath("C:");
 
 ifstream reading(FilePath.c_str(),ios::binary) ;// аналогично reading=fopen(const char* FilePath,'rb');
 return 0;
 }
Особенно интересна правильная замена fread :-)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2016, 10:02
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Аналоги методов работы с файлами из C в <fstream>C++ (C++):

fstream работа с файлами - C++
Помогите написать прогу или хотя бы алгоритм размещения текста в несколько столбцов! У меня идей вообще никаких нету! В работе с файлами...

Работа с файлами fstream - C++
есть дат файл концу этого файла надо добавить целое число: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; #include...

Принцип работы fstream - C++
Допустим у нас есть файл из четырех чисел, например: 453 32 43 54. Я создаю экземпляр класса ifstream и инициализирую массив из четырех...

Структура состоящая из двух дробей и методов работы с ними(сложение, вычитание) - C++
Пишем в Microsoft Visual Studio 2010 -&gt; Win32 Console Application -&gt; C++ Собственно задача такова - создать программу со структурой...

Шаблонный класс для работы с разными типами данных и объявление методов в main - C++
есть класс шаблонный, но не могу объявить методы в main и сделать длядругих типов :(когда делала через шаблонные функции, то программа...

Работы с файлами - C++
нужно вывести на экран текст с фала такого типа: Структура &quot;№1&quot; -фио -год рождения -балл -телефон FILE *f=fopen(&quot;c://1.txt&quot;,...

5
nd2
2820 / 2390 / 851
Регистрация: 29.01.2016
Сообщений: 8,000
24.12.2016, 11:37 #2
http://www.cplusplus.com/reference/fstream/ifstream/
http://www.cplusplus.com/reference/fstream/ofstream/
0
Galenus
0 / 0 / 0
Регистрация: 18.12.2016
Сообщений: 12
25.12.2016, 09:01  [ТС] #3
Я не нашёл там полноценной замены fread(
0
Martein
675 / 86 / 13
Регистрация: 22.06.2014
Сообщений: 182
25.12.2016, 09:35 #4
Galenus, плохо ищете: http://www.cplusplus.com/reference/istream/istream/read/
Для чего вам вообще делать эту замену? Ведь string'ов в Си нет, например. Расскажите подробнее о вашем изобретении. Вдруг у вас велосипедные спицы длиннее радиуса колёс, а вы ещё не подозреваете об этом?
1
Galenus
0 / 0 / 0
Регистрация: 18.12.2016
Сообщений: 12
25.12.2016, 12:33  [ТС] #5
Я хотел модифицировать алгоритм чтения/сохранения BMP файла с этого сайта:
http://math.ivanovo.ac.ru/dalgebra/Khashin/gr/bmp/bmp.html
сохранив конечный вид массива v(одномерный массив, содержащий значения всех пикселей начиная с самого верхнего левого). Знаю, что полно других способов, более "элегантных", но мне кажется, что именно этот вариант наиболее понятен для новичков. Но он устарел и содержит много ошибок очевидных и не очень: начиная с того, что int слишком мал для наших целей и нужен как минимум unsigned int, заканчивая тем, что заголовок без помощи #pragma pack(push,1)|#pragma pack(pop) читается абсолютно неверно из-за разницы в размерах типов данных и данных заголовка. Я сам только начинаю осваивать программирование в общем и C++ в частности, но какие-то базовые исправления внести хотел бы, но я упёрся в эту строчку и не смог пока найти равноценную замену
C++
1
res = fread( tmp_buf, 1, mx3*my, f);
А что за вакханалия происходит после строчки "Перенос данных" я не понимаю даже близко, но оно работает....
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
 // Заголовок прочитан и проверен, тип - верный (BGR-24), размеры (mx,my) найдены
    int mx = bh.biWidth;
    int my = bh.biHeight;
    int mx3 = (3*mx+3) & (-4);    // Compute row width in file, including padding to 4-byte boundary
    unsigned char *tmp_buf = new unsigned  char[mx3*my];    // читаем данные
    res = fread( tmp_buf, 1, mx3*my, f);
    if( (int)res != mx3*my ) { delete []tmp_buf; fclose(f); return NULL; }
    // данные прочитаны
    fclose(f); 
 
    // выделим память для результата
    v = new int[mx*my];
 
    // Перенос данных (не забудем про BGR->RGB)
    unsigned char *ptr = (unsigned char *) v;
    for(int y = my-1; y >= 0; y--) {
        unsigned char *pRow = tmp_buf + mx3*y;
        for(int x=0; x< mx; x++) {
            *ptr++ = *(pRow + 2);
            *ptr++ = *(pRow + 1);
            *ptr++ = *pRow; 
            pRow+=3;
            ptr ++;
        }
    }
    delete []tmp_buf;
    return v;    // OK
0
nd2
2820 / 2390 / 851
Регистрация: 29.01.2016
Сообщений: 8,000
25.12.2016, 12:47 #6
Цитата Сообщение от Galenus Посмотреть сообщение
и не смог пока найти равноценную замену
Цитата Сообщение от Galenus Посмотреть сообщение
res = fread( tmp_buf, 1, mx3*my, f);
C++
1
res = (f.read(tmp_buf, mx3*my)).gcount();
0
25.12.2016, 12:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2016, 12:47
Привет! Вот еще темы с ответами:

Организайция работы с файлами - C++
Помогите написать программу: Из текстового файла выбросить все пробельные символы. Новый файл не создавать.

Организация работы с файлами. - C++
Уважаемые формучане, выручайте! Нужно сдать последний зачет. Задача: В командой строке задается имя входного файла и целое число N....

Составить программы работы с файлами - C++
Доброго времени суток! Можете помочь с этим: Дан символьный файл F. Записать в перевёрнутом виде элементы файла F в файл G

Начало работы с файлами bmp - C++
Доброго времени суток Друзья, подскажите литературу или просто сайт, где можно почитать о bmp файлах (интересует все :)) На форуме...


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

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

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