/*здесь происходит открытие файла*/
/*тут, допустим, вычисляется размер файла*/
char* content;
content=new char[file_size];
/*далее засунем содержимое файла в буфер, допустим, вот таким вот образом:*/
__int64 bytes_read;//третий параметр для ф-ии ReadFile, чтобы сохранять количество прочитанных байт
ReadFile(handle_of_file, content, sizeof(content), bytes_read, NULL);
Работа с файлами
Код:
Однако после простения примеров из МСДН появились сомнения в связи с тем, что там буфер заполняется зачем-то частями, кратными размеру сектора на диске. Хочется знать, необходимо ли это и можно ли поступить так, как я написал?
Цитата: vagiz
Однако после простения примеров из МСДН появились сомнения в связи с тем, что там буфер заполняется зачем-то частями, кратными размеру сектора на диске. Хочется знать, необходимо ли это и можно ли поступить так, как я написал?
В принципе ничего удивительного ведь все кластеры файла, не обязательно находятся рядом, файл может быть фрагментирван и одной порцией считать его врядли получиться. А в чём собственно проблема? это особо критично, способ считывания файла в буфер?
P.S. размер файла можно получить через функцию GetFileSize.
Цитата: vagiz
CreateFileMapping не подходит, т.к., насколько мне известно, изменение содержимого буфера приводит к немедленным изменениям самого файла на диске.
При вызове CrealeFileMapping используйте флаг РАСЕ_WRITECOPY, а при вызове MapViewOfFile - флаг FILE_MAP_COPY. Тогда все изменения в файле будут записываться в страничный файл, что никак не повлияет на исходный файл.
Цитата: vagiz
... можно ли поступить так, как я написал?
Можно. Тока желательно чтоб файл был не очень большого размера.