![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| freezeman |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Всем привет!
Подскажите, пожалуйста, в структуре BY_HANDLE_FILE_INFORMATION есть два параметра nFileIndexLow и nFileIndexHigh младший и старший идентификатор файла, что означает младший/старший? Я же могу однозначно идентифицировать конкретный файл по этим параметрам? |
|||
|
||||
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
||||
|
||||
| freezeman |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Плохо...как тогда по-другому идентифицировать файл, кроме пути к нему на диске? Добавлено через 5 минут и 36 секунд Если сделать MD5 или CRC16? Для работы программы критична скорость работы, то есть получение хэша файла не скажется ли сильно на производительности? |
||||
|
|||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
Где идентифицировать? На диске или как процесс?
Добавлено через 3 минуты и 2 секунды Сорри ступил ))) "на диске" Ну если файловая система ntfs то можно инфу некую о файле в поток записать ) -------------------- |
|||
|
||||
| freezeman |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Я вот подумал, что не нужно делать хэш всего файла, а только пути к нему, так и быстрее проверять... |
|||
|
||||
| 12usver12 |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
читаем плохо. ничего сложного, для идеального решения тебе нужно сформировать этот Id через 128-битовое число:
|
||||
|
|||||
| Akira |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 26.3.2012 Репутация: нет Всего: нет |
Нет, ничего такого нет, все делают контрольные суммы. Если файл не большой то оверхеда практически нет.
12usver12 Не надежно, кто даст гарантию, что у Васи будет работать. Это сообщение отредактировал(а) Akira - 6.4.2012, 14:03 |
|||
|
||||
| freezeman |
|
||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
А это тогда что?
|
||||||||
|
|||||||||
| freezeman |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Нет, немного не поняли вы вопрос, мне нужно идентифицировать уникально файл. Получил по HANDLE файла его путь, но сравнение будет выполняться долго. Если у параметров файла был бы уникально его идентифицирующий, то нет проблем все нормально, но нет Скорее всего лучше будет использовать CRC16 для кодирования имени файла, а потом сравнивать только полученные ключи... |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
а если 2 одинаковых файла а имена только разные?
-------------------- |
|||
|
||||
| freezeman |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Я думал над этим, тогда придется делать хэш по содержимому файла, но мне кажется, что при большом объеме времени много уходить будет... |
|||
|
||||
| Akira |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 26.3.2012 Репутация: нет Всего: нет |
freezeman
>> CRC16 Ты пытаешься экономить на спичках можешь спокойно использовать CRC32 или MD5. По поводу содержимого файла, а если файл часто используем и дописывается? |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
Akira
а если у меня коллекция mkv фильмов по 1,5 гига каждый, каждый раз считать crc или md будет накладно. -------------------- |
|||
|
||||
| freezeman |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
А я не знаю скорость работы, что лучше CRC16, CRC32 или MD5. Если у файла изменяется содержимое, это никак не влияет на работу. Этот измененный файл просто не будет учитываться, потом вытеснится из памяти (если вы помните мою предыдущую тему "Виртуальная память", поймете о чем я), и если требуется опять туда будет занесен. Хотя, если стоит подумать о изменении файла в ОП сразу после изменения содержимого файла, но это потом, если успею... |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
На мой взгляд самое удобное при наличии NTFS как файловой системы просто пронумеровать файлы к примеру и каждому файлу присвоить уникальный номер с записью этих данных в поток.
Таким образом файл можно будет изменять, переносить, делать что угодно, идентификатор останется неизменным. -------------------- |
|||
|
||||
| freezeman |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Конечно, накладно. Во-первых, есть ограничение на объем и такие файлы не будут учитываться, скорее всего, если только оперативки гигов 16 не будет... Во-вторых, скорее всего откажусь от хэширования всего содержимого, как подчеркнул Akira, если часто изменяется содержимое файла, то хэш меняется, что требует дополнительного времени на контроль этого момента. Если файлы с одинаковым содержимым и разными именами, то просто обходить путем проверки хэша на момент проверки Добавлено через 4 минуты и 33 секунды
Но как их нумеровать? Просто таблицу соответствия или есть функция winapi? Хорошая идея, кстати, если только нумерация не собьется |
||||
|
|||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
freezeman,
http://otvety.google.ru/otvety/thread?tid=0e956353239996eb а в каспере не дураки сидят ))) используй потоки и будет тебе счастье -------------------- |
|||
|
||||
| freezeman |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Хорошая идея. Я могу запустить отдельный поток который будет выполнять нумерацию файла, или же в процессе доступа к этому файлу (У меня идет перехват обращений к файлам). Но в любом случае, как проводить идентификацию iSwift? |
|||
|
||||
| Akira |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 26.3.2012 Репутация: нет Всего: нет |
500mhz
>> а если у меня коллекция mkv фильмов по 1,5 гига каждый, каждый раз считать crc или md будет накладно. И я о том же, тем более содержимое может меняться. >> а в каспере не дураки сидят ))) Глядя на исходники каспера я бы так не утверждал. А так, да, потоки можно заюзать. |
|||
|
||||
| freezeman |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
А вы видели исходники?)) |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
не, ты не понял не многа видимо, потоки в НТФС это не потоки в процессе.
это определенного вида данные которые привязаны к файлу. размер и тип не ограничен, хоть гигабайт. я вижу это так, есть директория с файлами, пробегаемся по всем файлам и нумеруем от 1 до Х, номер файла пишем в поток. вот тут внятно написано http://alexeivasin.com/post/ntfs-ads.aspx Добавлено через 1 минуту и 35 секунд Akira -------------------- |
|||
|
||||
| freezeman |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
да, не понял;) Думал к конкретному файлу указать уникальный ID в параметрах что-ли.
А как вы думаете, не получится ли это слишком затратно для системы? Просто у меня этих обращений к файлам будет ооочень много... |
||||
|
|||||
| Akira |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 26.3.2012 Репутация: нет Всего: нет |
freezeman
>> А вы видели исходники?)) Ога, тот еще трэш один клиф.сус доставляет не говоря об остальном. Нет, не будет, хотя для твоей задачи достаточно поти и имени. 500mhz Мну тоже забанен, что еще можно от ахтунг лаба ожидать. Это сообщение отредактировал(а) Akira - 6.4.2012, 15:52 |
|||
|
||||
| freezeman |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Вспомнил ролик презентации)) youtube Видимо эта побочный эффект их кода Это сообщение отредактировал(а) freezeman - 6.4.2012, 15:55 |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
-------------------- |
|||
|
||||
| freezeman |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Аххаахх, нужно было бы ещё добавить спец. эффекты на подобии в убойного футбола Но все же, может и корявый код, но они лидеры на рынке в России точно, а может и в их числе в мире. Это сообщение отредактировал(а) freezeman - 6.4.2012, 16:09 |
|||
|
||||
| 12usver12 |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
Определись что тебе нужно:
1) Уник. id файла по его местоположению в системе - тогда покатит контрольная сумма пути файла (учитываем что в crc есть коллизии, вероятность небольшая но все же) 2) Уник id файла по местоположению + содержимому - тогда лучше использовать эти индексы
С чего решили, что ненадежно ? в msdn это не написано, это же не использование недокументированных функций. XP включительно и выше должно быть надежно.
я так понимаю, что не гарантируется если FAT система, а их процент ничтожно маленький. p.s. ни разу не пробовал данный метод, но для коротких промежутков времени должно быть нормально, как мне кажется. |
||||
|
|||||
| Akira |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 26.3.2012 Репутация: нет Всего: нет |
12usver12
>> С чего решили, что ненадежно? Да хотя бы из-за ховнософта. Были прициденты в практике, поэтому не надеюсь на Васю, что у него все в порядке на компе. |
|||
|
||||
| freezeman |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Я пока не решил, если смогу за выходные реализовать второй вариант, если нет, то первый сделаю, он проще...
Нужно точно будет проверить, если это так, то зачем все усложнять? Есть идентификатор файла и всё, и все эти хэши, альтернативные потоки только нагружать будут.. |
||||||
|
|||||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
У ID в отдельном файловом потоке есть недостаток - этот поток запросто может потеряться при каком нибудь копировании файла
|
|||
|
||||
| freezeman |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Да еще и усложняет это задачу слишком, лучше будет просто хэш пути к файлу+время последнего изменения |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |