Форум программистов, компьютерный форум CyberForum.ru

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

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

Работа с памятью как с файлом - C++

09.06.2013, 10:54. Просмотров 329. Ответов 5
Метки нет (Все метки)

Есть сторонний класс, который загружает и работает с файлом через std::ifstream. Выглядит так: Load(const char *Filename). Но у меня этот файл уже представлен в памяти. Есть указатель на эти данные, и известен размер. Как мне изменить функцию Load, чтоб работая с ifstream, она на самом деле работала с данными в памяти? Вобщем, поменять на Load(void *data, long int data_size). Не пойму, что нужно изменить.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2013, 10:54     Работа с памятью как с файлом
Посмотрите здесь:

Работа с памятью C++
Работа с памятью. (Незнаю как правильно назвать тему). C++
работа с памятью C++
C++ Работа с памятью
C++ работа с памятью
C++ Работа с памятью
C++ Работа с памятью в С++
C++ Работа с памятью
Работа с памятью C++
Работа с текстовым файлом: как посчитать кол-во букв в слове? (посимвольная обработка) C++
C++ Работа с текстовым файлом как с базой данных

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wolkodav
601 / 454 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
09.06.2013, 11:23     Работа с памятью как с файлом #2
Ну вот передавайте в фунцкию указатель на начало. Вам известен размер? Если да, то пока не достигнут конец файла уваличивайте уазатель( просто ++). А что бы получить данный из "файла" надо произвести разыменование указателья.
Pro_ha
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 32
09.06.2013, 12:31  [ТС]     Работа с памятью как с файлом #3
Не понял вас.
Вот есть готовая рабочая функция:
C++
1
2
3
4
bool Load(const char *Filename){
  std::ifstream file(Filename, std::ios::binary | std::ios::in);
  //...остальной код, использующий file.seekg, file.read
}
Я хочу ее переделать на:
C++
1
2
3
4
bool Load(void *data, long int data_size){
  //Что тут изменить, чтоб обьект file не загружал данные с файла, а брал их с *data.
  //...остальной код, использующий file.seekg, file.read
}
Я мог бы вобще не создавать обьект file, а работать сразу с void *data, но тогда придется в этой функции переписывать много мест, где встречается file.seekg, file.read.
Wolkodav
601 / 454 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
09.06.2013, 13:01     Работа с памятью как с файлом #4
А мне кажется вам однозначно пришлось бы их переписывать.
Ну смотрите, void*, указатель на начало "файла", вам наверное известен размер файлы, вот и бегите по файлу. Перейти к следующему элементу в файле data++, а получить данный *data( только их надо преобразовывать). Если я правильно понял.
Pro_ha
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 32
09.06.2013, 13:33  [ТС]     Работа с памятью как с файлом #5
Ну вот я думал, может можно не переписывая кучу кода просто подменить источник данных для обьекта std::ifstream.
Wolkodav
601 / 454 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
09.06.2013, 13:45     Работа с памятью как с файлом #6
Возможно можно и так. Подождите, может другие чего дельного напишут.
Yandex
Объявления
09.06.2013, 13:45     Работа с памятью как с файлом
Ответ Создать тему
Опции темы

Текущее время: 02:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru