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

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

Восстановить пароль Регистрация
 
Pro_ha
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 32
09.06.2013, 10:54     Работа с памятью как с файлом #1
Есть сторонний класс, который загружает и работает с файлом через 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++ работа с памятью
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wolkodav
 Аватар для Wolkodav
599 / 452 / 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
 Аватар для Wolkodav
599 / 452 / 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
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
09.06.2013, 13:45     Работа с памятью как с файлом #6
Возможно можно и так. Подождите, может другие чего дельного напишут.
Yandex
Объявления
09.06.2013, 13:45     Работа с памятью как с файлом
Ответ Создать тему
Опции темы

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