![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
как можно быстро прочитать весь файл целиком? я знаю как читать через
fopen("c:\\1.txt", "rb"); fread(Bytes, 1024, 1, flash); ... но как мне узнать в таком случае размер файла в байтах? читаться должня файлы BitMap (.bmp) можно показать кодом как это делается?? -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| _stranger_ |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 3.10.2006 Где: город-герой Киев Репутация: 2 Всего: 2 |
как вариант...
|
|||
|
||||
| dizzy1984 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: 3 Всего: 25 |
Не проверял, но думаю что если этот код _stranger_ переписать с использованием ifstream, то будет выигрыш в скорости чтения
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
А использование fstream и метода rdbuf() не подойдет?
Добавлено через 1 минуту и 12 секунд
|
|||
|
||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Xenon, если честно проблемы скорости меня не волнуют, программа того не стоит что бы скорость её проверять. главное что бы работала - единственное требование... гы..
Xenon, _stranger_, пасибо за помощь!!! -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| ZC1989 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Щас попробовал, с размером получилось всё, а вот фишка в другом высочила...
мой огрызок кода выглядит так:
я смотрел на выделяемый буффер, там около 44145 единиц... ну вобщем-то правильно, а почему я вижу вместо кучи символов из этого файла только первую строчку
а там ещё куча всего должна быть!!! и ещё я попробовал сохранить этот буффер в файл (может просто винда отказывается выводить те символы) а в файл та же пакасть сохраняется... сохранял так:
-------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
||||||
|
|||||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
вполне возможно, она там есть, просто вы используете указатель на char, и компилятор естественно считает что вы передаете ему строку, и все действия с вашим указателем производит как со строкой(те до первого попавшегося нуль-символа). Что делать. Ну про мессадже бокс ничего не скажу, не понимаю, что вы хотели изобразить |
|||
|
||||
| Kipter |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 2.5.2006 Репутация: нет Всего: нет |
Возможно этот примерчик тебе поможет? Добавлено через 7 минут и 17 секунд Только не забудь после использования освободить память выделенную под заголовок фаила и его BitMap массив... тут конечноже нету никакого освобождения памяти это предусмотрено другой функцией... |
|||
|
||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Kipter, как загружать битмаппы в прогу я знаю, мне в данной ситуации надо получить все его байты...
zkv, попробую так.... а в мессадж боксе я хотел просто увидеть ту же пакасть (содержимое файла) что и через EditPlus... а именно бредовые символы и много-много квадратиков... Добавлено через 12 минут и 16 секунд zkv, получилось то что хотел! fwrite() то что надо!!! закрываю тему... -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| dizzy1984 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: 3 Всего: 25 |
За счет более оптимального алгоритма чтения. Вот результаты замеров применения метода read для буфера в 64*10^6 байт ifstream::read fread ------------------------------------ 1 1406 1515 2 1484 1422 3 1391 1515 4 1454 1406 5 1406 1438 6 1422 1453 7 1485 1453 8 1453 1422 9 1469 1453 10 1484 1469 ----------------------------------- ср. арифметическое ----------------------------------- 1445,4 1454,6 выражено ~ 10^-3 секундах Правда выгода не велика, а учитывая погрешности, можно сказать что они работают примерно одинаково. Пользоваться можно тем, чем удобнее. Интересно было бы сверить скорости работы методов чтения класса CFile и ifstream Это сообщение отредактировал(а) dizzy1984 - 25.4.2007, 13:12 |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Выгода? Где эта выгода? Средние числа отличаются меньше, чем на 1%, все разбросы в диапазоне случайных. |
|||
|
||||
| dizzy1984 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: 3 Всего: 25 |
Я и сам пришел к тому же выводу, читай пост выше
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
| dizzy1984 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: 3 Всего: 25 |
Хм...
Столь сильное желание несоглашаться побудило меня на другие эксперименты. Главный опасный момент в предыдущих результатах заключался в том, что как средство измерения я использовал ::GetTickCount(), точность которого была где-то 1*10^-3. Кроме того у меня был слишком большой буфер. Теперь я вооружился абсолютным средством, а именно счетиком TSC и связанной с ним RDTSC, кроме того я увеличил время чтения. Похоже я действительно "пролетел" с точностью измерений. Теперь результаты с лихвой подтверждают мое первоначальное суждение. 92170230 для fstream::read против 613031179 для fread. Время чтения с помощью fstream::read ~5 раз меньше fread. Такие вещи полезно знать для программ работающих с большими файлами. Вот сам код.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |