Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с файлами

36K
30 августа 2008 года
vagiz
14 / / 30.08.2008
Здравствуйте! Каким образом можно поместить содержимое файла в несто вроде буфера? CreateFileMapping не подходит, т.к., насколько мне известно, изменение содержимого буфера приводит к немедленным изменениям самого файла на диске. Также я столкнулся с проблемой вычисления размера файла, но на этом пока не хотелось бы особо заострять внимание. Желательно получить совет относительно именно помещения ВСЕГО содержимого файла в буфер. Хочется узнать, подойдет ли такой вариант:
 
Код:
/*здесь происходит открытие файла*/
/*тут, допустим, вычисляется размер файла*/
char* content;
content=new char[file_size];
/*далее засунем содержимое файла в буфер, допустим, вот таким вот образом:*/
__int64 bytes_read;//третий параметр для ф-ии ReadFile, чтобы сохранять количество прочитанных байт
ReadFile(handle_of_file, content, sizeof(content), bytes_read, NULL);

Однако после простения примеров из МСДН появились сомнения в связи с тем, что там буфер заполняется зачем-то частями, кратными размеру сектора на диске. Хочется знать, необходимо ли это и можно ли поступить так, как я написал?
261
31 августа 2008 года
ahilles
1.5K / / 03.11.2005
Цитата: vagiz

Однако после простения примеров из МСДН появились сомнения в связи с тем, что там буфер заполняется зачем-то частями, кратными размеру сектора на диске. Хочется знать, необходимо ли это и можно ли поступить так, как я написал?


В принципе ничего удивительного ведь все кластеры файла, не обязательно находятся рядом, файл может быть фрагментирван и одной порцией считать его врядли получиться. А в чём собственно проблема? это особо критично, способ считывания файла в буфер?
P.S. размер файла можно получить через функцию GetFileSize.

288
01 сентября 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: vagiz
CreateFileMapping не подходит, т.к., насколько мне известно, изменение содержимого буфера приводит к немедленным изменениям самого файла на диске.


При вызове CrealeFileMapping используйте флаг РАСЕ_WRITECOPY, а при вызове MapViewOfFile - флаг FILE_MAP_COPY. Тогда все изменения в файле будут записываться в страничный файл, что никак не повлияет на исходный файл.

14
01 сентября 2008 года
Phodopus
3.3K / / 19.06.2008
Цитата: vagiz
... можно ли поступить так, как я написал?


Можно. Тока желательно чтоб файл был не очень большого размера.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог