![]() |
|
|
![]()
|
|
| Bima |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 15.8.2006 Репутация: 2 Всего: 2 |
есть код:
Здесь интересны всего три строки:
что бы их добавить, нужно подключить:
Можно, как нибудь все это сделать одной командой??? может есть встроенная команда (для примера FileExists, определяет есть ли файл) для определения размера файла??? -------------------- Чтобы дойти до цели, надо идти. Клавиатура и мышь - это главные инструменты прогресса. |
||||||
|
|||||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 11 Всего: 146 |
TFileStream::Size
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| codelord |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 16 Всего: 39 |
знаю еще такие варинаты без доп подключений если есть vcl
или, с использованием GetFileSize, но ей всеравно нужен Handle файла:
по скорости приблизительно одинаково работают, второй процентов на 15 быстрей. |
||||
|
|||||
| Bima |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 15.8.2006 Репутация: 2 Всего: 2 |
а что быстрее будет работать и стабильнее, прошлый код (см. выше) или новый???
новый код:
или вот этот код:
[/code] Это сообщение отредактировал(а) Bima - 25.12.2006, 15:35 -------------------- Чтобы дойти до цели, надо идти. Клавиатура и мышь - это главные инструменты прогресса. |
||||
|
|||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 11 Всего: 146 |
можно еще и через
FindFirstFile FindClose структура WIN32_FIND_DATA . DWORD nFileSizeHigh; DWORD nFileSizeLow;
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
#include <IdGlobal.h>
Size = FileSizeByName("test.txt"); |
|||
|
||||
| Bima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 15.8.2006 Репутация: 2 Всего: 2 |
Наверно это самый короткий код, но использовать компонент Indy(хотя я могу могу ошибаться), хм. А все таки, что лучше использовать??? тут уже 4 реально работающих кода. У меня приложение будет работать постоянно, то есть на серваке не меньше месяца. Код будет вызываться раз в минуту или реже. -------------------- Чтобы дойти до цели, надо идти. Клавиатура и мышь - это главные инструменты прогресса. |
|||
|
||||
| codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 16 Всего: 39 |
по моим тестам получилось так:
самый быстрый вариант: тот который в моем посте второй там где
потом около 15 % отставания от него способом fseek, далее приблизительно с отставанием 20-25% от первого идет способ с TFileStream, c IdGlobal у меня не заработал начал ругаться на кругом расставленные GetTickCount(); вот так. пробовал вызывать функции на несколько тыс файлов никто не ругнулся. (хотя конечно проверки добавтить не помешало бы). |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 2 Всего: 121 |
Любой из вышеприведённых примеров прицнипиально друг от друга ничем не отличается, на уровне системы всё сводится к CreateFile/GetFileSize(ну или аналогичные API). Так зачем использовать эти обёртки? Сразу вызывай соответствующие API, как показал codelord. Это сообщение отредактировал(а) W4FhLF - 26.12.2006, 08:55 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 32 Всего: 158 |
быстрее всего, по идее, должно быть таки через FindFirst, ибо при открытии файла все равно запись в каталоге читается.
|
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 2 Всего: 121 |
FindFirstFile работает через пару функций ZwOpenFile/ZwQueryDirectoryFile. При этом уходит куча времени на преобразование ANSI строк в UNICODE и заполнении структуры WIN32_FIND_DATA. Другое дело, если сразу работать с FindFirstFileExW, тогда можно сэкономить кучу тактов. Пара CreateFile/GetFileSize работает через пару функци ZwCreateFile/ZwQueryInformationFile, никаких заполнений структур здесь не происходит, но тоже много времени теряется на преобразовании ANSI > UNICODE. Отсюда вывод, что оба примерно по скорости примерно одинаковы, если только использовать их W аналоги и работать с UNICODE строками. Быстрее тут ничего не придумаешь, ну разве что вызывать ядерные функции напрямую. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 32 Всего: 158 |
время выполнения непосредственно кода системных функций в данном случае не играет большой роли - основные задержки при обращении к диску(кэш не рассматриваем). предыдущий мой пост следует понимать именно в этом ключе - в какие дисковые операции "выливаются" эти варианты.
|
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 2 Всего: 121 |
Так обращений к диску мы никак не избежим в любом случае, поэтому обсуждать это не имеет смысла. Лучше подумать как наиболее оптимально работать с функциями. Хотя, что тут думать и так всё ясно...
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 32 Всего: 158 |
дык не про "избегание" речь, а про возможное сокращение количества обращений. а что до скорости работы кода функций, то естественно, выигрывает CreateFile/GetFileSize(~32k/sec), чуть медленнее с vcl-обвеской(ввиду ее малого объема) в виде FileOpen/FileSeek(~30k/sec), и отчаянно тормозит FindFirstFile(~8k/sec). (note: кол-во естественно привязано к конфиге). дальше ковырять как-то ломает... можно, конечно, в дизасм углубиться, над файлмоном шаманить с фотоаппаратом, но... неинтересно, что ли... edit: "то естественно, выигрывает" - эт я, пожалуй, перевозбудился. нифига это не было очевидным, хотя интуитивно ZwQueryDirectoryFile немного настораживало... Это сообщение отредактировал(а) dumb - 27.12.2006, 05:11 |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |