|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
15.05.2011, 23:58 | #1 |
Пользователь
Регистрация: 14.09.2008
Сообщений: 61
|
Вопрос по ViewMapOfFile
Цель: написать прогу, которая поменяет местами две половины большого двоичного файла.
Код:
|
16.05.2011, 00:03 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx почитайте.
а вообще мне кажется что дело в гранулярности. проекция у вас размером в одну страницу а это 4096 байт Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
16.05.2011, 00:16 | #3 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
Может при создании мапа (CreateFileMapping) поставить ограничение на максимальный размер мапа.
|
16.05.2011, 00:19 | #4 | |
Пользователь
Регистрация: 14.09.2008
Сообщений: 61
|
Цитата:
Только я немного не догоняю что это за cтарший и младший DWORD смещения. Последний раз редактировалось qip2005; 16.05.2011 в 00:23. |
|
16.05.2011, 00:22 | #5 |
Пользователь
Регистрация: 14.09.2008
Сообщений: 61
|
|
16.05.2011, 00:34 | #6 | |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
Цитата:
Пепел Феникса правильно отметил, что при создании вьюва память резервируется не байтами а страницами. |
|
16.05.2011, 00:38 | #7 | |
Пользователь
Регистрация: 14.09.2008
Сообщений: 61
|
Цитата:
Я понимаю что так надо сделать, но я же не смогу взять допустим 2-гиговый файл в память целиком пихать, это надо делать частями, допустим по 64 кв, а взять определенное количество байт не получается Последний раз редактировалось qip2005; 16.05.2011 в 00:51. |
|
16.05.2011, 14:15 | #8 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
Ну, так проводите эксперименты над файлами размером 500к минимум, а не с 10 байтным файлом.
Еще стоит проявить внимание при выборе смещения при открытии вьюва (иструкция говорит, что смещение должно быть кратно 64к, а это значит, что ваша задача становится интересной, когда размер файла не кратен 64к, или, что еще страшнее, меньше 64к). В целом, смещение внутри файла это 64-битное целое (для того чтобы работать с реально большими файлами). Ну, и понимая это, младший и старший DWORD смещения будут равны младший = смещение_64 & 0xFFFFFFFF старший = смещение_64 >> 32 Последний раз редактировалось f.hump; 16.05.2011 в 14:22. |
16.05.2011, 18:04 | #9 | |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
Цитата:
во-первых, память выделяется с определённой гранулярностью во-вторых, при малом размере файла драйверу жёсткого диска совершенно без разныцы сколько считать 5 байт или 50 в-третьих, при равной цене лучше конечно купить то чего больше, например, тебе предложат купить полкило колбасы за 100 р. или килограмм колбасы за 100 р., ты конечно купишь килограмм в этом случае чтобы случайно не изменить данные, которые не должны поменяться, надо просто поставить дополнительные проверки |
|
18.05.2011, 18:37 | #10 |
Пользователь
Регистрация: 14.09.2008
Сообщений: 61
|
Немного разобрался, вот что вышло:
Код:
И вторая проблема в том что если размер файла не кратен гранулярности, то взять две равные половины не получается. Первую без вопросов беру ровно половину, а вот вторая берется с захватом небольшого кусочка первой и в итоге этот кусочек не дочитывает до конца. Как исправить подскажите? Последний раз редактировалось qip2005; 18.05.2011 в 18:39. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос по mySQL + Вопрос по RichEdit | HTL | Общие вопросы Delphi | 4 | 01.01.2010 20:22 |
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) | Albert2008 | Общие вопросы Delphi | 4 | 21.08.2008 15:33 |
вопрос по сокетам и общение как в ICQ.Сложный вопрос... | Руслантус | Общие вопросы C/C++ | 2 | 12.08.2008 21:10 |
вопрос по С# | Roberto | Фриланс | 1 | 17.05.2008 08:12 |
Вопрос | Mitron | О форуме и сайтах клуба | 1 | 11.02.2008 06:26 |