HANDLE hFile1, mapping;
char buf[100];
hFile1 = CreateFile(filename1, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
mapping = CreateFileMapping(hFile1, 0, PAGE_READWRITE, 0, 0, 0);
if(mapping)
{
buf = (LPCTSTR)MapViewOfFile(mapping, FILE_MAP_ALL_ACCESS, 0, 0, 100);
if(buf)
{
UnmapViewOfFile(buf);
}
CloseHandle(mapping);
}
CloseHandle(hFile1);
Открытие бинарного файла WinApi
Буду рад любым ссылкам по теме, кроме посыланий на google.com, yandex.ru и т.п.
Скриншот из тотала в комплекте.
Да как угодно. Открываете файл, и - вперёд!
> чтобы при его открытии он выглядел как
> Т.е. в виде блоков по две шестнадцатеричные цифры
Показываете считанные данные в нужном вам формате. Можно сделать самому, можно воспользоваться готовыми решениями: http://www.codeproject.com/KB/cpp/frhed.aspx
> И что вообще означает такая запись?
Означает содержимое файла в шестнадцатеричном формате. Инфы мало, но хоть что-то: http://ru.wikipedia.org/wiki/HEX-%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80
Показ данных в шестнадцатеричном виде пошёл, думаю, от ассемблеров/дизассемблеров. От себя добавлю, что на некоторых платформах (архитектурах процессора) более удобным является восьмеричное представление ассемблерного кода.
P.S. и при чём тут WinAPI?
Думал, что под этими hex-кодами скрывается что-то невообразимое и справиться с этим можно только средствами WinApi.
А так - спасибо за разъяснения.
Код:
По идее в переменной buf должны быть первые 100 символов, но там лишь строка до первого символа с hex-кодом 00.
Как считать файл, независимо от содержания?
Upd:Хотя при считывании в виде обычного файла, все происходит как и задумано
Код:
char buff[100];
fp = fopen(filename1, "rb");
if (fp == NULL) {
perror("Ошибка при открытии \"мойфайл\"");
return EXIT_FAILURE;
}
res = fread(buff, sizeof(char), 100, fp);
fclose(fp);
fp = fopen(filename1, "rb");
if (fp == NULL) {
perror("Ошибка при открытии \"мойфайл\"");
return EXIT_FAILURE;
}
res = fread(buff, sizeof(char), 100, fp);
fclose(fp);
Получается проблема конкретно в считывании при проецировании. Как правильно считывать из проекции?
Надо, чтобы загружались файлы до 4 гигов.
Цитата: rusek
в переменной buf…лишь строка до первого символа с hex-кодом 00
Как определяете?
А вообще,
Код:
buf = [COLOR="Red"](LPCTSTR)[/COLOR]MapViewOfFile(mapping, FILE_MAP_ALL_ACCESS, 0, 0, 100);
Открываю файл в hex-редакторе и сравниваю с тем, что получил при чтении
из проекции
> Может быть,дело в этом,нэ?
К какому типу тогда приводить, если ни к LPCTSTR?
Вы для какой цели приводите?
> Вы для какой цели приводите?
Нужно будет работать с текстовым представлением файла. Если не приводить - вылезет ошибка при компиляции.
Вы неправильно понимаете концепцию отображаемых файлов. Буфер там не нужен, его системы выделяет сама. Если вы хотите получить первые 100 байт файла в буфер, вставьте memcpy(buf, pmap, 100) после MapViewOfFile().