![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Нужно в папку сохранять файлы без участия юзера. То есть имя должно быть уникальным.
При переборе этих файлов при помощи FindNextFile нужно чтобы они находились в порядке обратном порядку их создания. При этом не свои (юзерские) файлы не нужны вовсе (я их фильтрую по содержанию). Какие будут идеи по поводу алгоритма выбора имен? У меня есть парочка, но вдруг кто-то чего поумнее предложит... -------------------- Обижено школьников: 8 |
|||
|
||||
| Sunr1se |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 1.5.2006 Репутация: 6 Всего: 13 |
Есть такая идея: получать текущую дату и производить такие вычисления:
В результате получится действительно уникальное число... Хотя, можно еще секунды и миллисекунды прибавлять. --------------------
IRC-канал Винграда |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
Может просто IntToStr(GetTickCount)+'.txt'?
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Yanis, не самый надежный способ.
И не удовлетворяет условию задачи. Т.к. порядок получится вообще какой попало в зависимости от перезагрузки системы.
Добавлено @ 09:24 Более поздние файлы должны идти по списку раньше. Добавлено @ 09:25 P.S. По дефолту, файндфёст будет находить файлы в порядке их создания, независимо от имени. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
-------------------- Обижено школьников: 8 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Ищи, добавляй в стринглист, сортируй - будет нужный результат.
Добавлено @ 09:41 Как вариант - при добавлении нового файла, менять ему дату создания на более раннюю. Но не факт, что поможет. Я не проверял. |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
Знаю, просто подумал, что может для простой задачи и так пойдёт. bems Почему бы вообще не завести свой тип файлов? |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Именно так я и сделал. Ну а как это касается темы?
Добавлено @ 09:55 В проекте SysUtils - роскошь, а ты про стринглист -------------------- Обижено школьников: 8 |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
Я имею, что файлы юзера и файлы твоей программы пересекаются. Может можн как то разграничить? В отдельные папки например... |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
-------------------- Обижено школьников: 8 |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
Тогда просто создавай файл - список нужных тебе файлов. И чужие файлы в этот список уже никак не влезут...
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
-------------------- Обижено школьников: 8 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Ну с уникальностью ясно.
Вопрос с упорядочиванием файлов. Тебе нужен последний созданный файл или список файлов, упорядоченных по дате создания? Если первое, то просто беги файндфёстом и бери последний. Если второе, то беги фаёндфёстом и организуй стек из имен файлов. Потом для работы просто доставай из стека по одному. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
-------------------- Обижено школьников: 8 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Но построить стрек имен файлов ведь недолго.
Для этого их совсем не нужно открывать. Кроме того, если в имени файла уже заложена дата, то не нужно открывать все - можно сориентироваться по имени или дате создания. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Точно принадлежность файла можно определить только по сигнатуре в хедере - а вдруг чужой? Добавлено @ 17:50 И то не точно. Думаю добавить CRC -------------------- Обижено школьников: 8 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Зачем. Просто создай своё персональное расширение для своих файлов.
Например '5123482835.ItsFileOfMyCoolProgram' Или в конце концов создай GUID и используй его, как собственное расширение. Файлов с расширением A8D329BD7C8B4E1DB88F3876B602EF64 точно не бывает. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Уже сделал.
-------------------- Обижено школьников: 8 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Главное, что в стандартных условиях большинство файлов сразу отсеится.
А в нестандартных - юзер сам виноват. Проверку нуно делать перед использованием конкретного файла. Проверять все - незачем. |
|||
|
||||
| Mechanic |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 6 Всего: 7 |
Как бы ни ухищрялся, всегда найдётся изобретательный идиот, который сделает именно то, о чем ты не подумал. Проще в описании программы написать "в папке данных программы нельзя создавать / изменять / удалять / переименовывать файлы". Никто ведь Биллу не дотумкается выставить счет, если при удалении случайных файлов пакета Microsoft Office, тот случайно перестанет работать. А защитить файлы можно просто раздачей прав на папку (NTFS rules).
Не знаю. Если бы меня попросили реализовать нечто подобное, я бы полностью абстрагировался от этих "изобретательных идиотов", и сделал бы диапазон дат лога в его имени. Типа ГГГГММДДЧЧММСС_ГГГГММДДЧЧММСС.MyExt тогда бы поиск файлов был бы простым перебором всех имен. Просто в этом случае нужно было бы проверять корректность системных часов (да хоть при запуске), чтоб не было запусков "в прошлом". И уж если очень захотелось бы быть уверенным в целостности файла, то прикрутил бы к нему какой-нить хэш в конце (типа CRC, SHA1 etc, только чуть подкриптованных и измененных, чтоб отсеять и очень изобретательных идиотов --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
||||
|
|||||
| bems |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Используются на другой машине. Что, отправлять кучу лишнего, а там уже разбираться? Дорорговато...
Очень изобретательные еще что-нибудь придумают, но защититься от скопированного и переименованого моего же файла нужно. -------------------- Обижено школьников: 8 |
||||||
|
|||||||
| Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 6 Всего: 7 |
Тогда нужно хэш тулить уже в имя файла. --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Спасибо, ребята.
Останавливаюсь на следующем: 1. Файлы называются ггггммддччммссс.gsrtrs5ysrwrevthh.ext где ггггммддччммссс время ПЕРВОГО сообщения в логе, а gsrtrs5ysrwrevthh выбирается во время сохранения 2. Вхедере оставляю и время первого и время последнего сообщения. 3. При чтении директории для выбора очередности обработки игнорирую все после первой точки 4. Отправляю на тачку админа файлы, в имени которых есть дата и время после указанных в запросе клиентской части проги. 5. Открываю файл, предшествующий по дате и времени (тех что в имени) первому отправленному и проверяю на частичное соответствие запросу. Если запрошенная клиентом дата где-то в середине этого файла, то отправляю и этот. Думаю, тема закрыта. Если есть замечания по поводу этой схемы, то прошу... Это сообщение отредактировал(а) bems - 27.5.2006, 16:06 -------------------- Обижено школьников: 8 |
|||
|
||||
| Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 6 Всего: 7 |
По какому принципу? И есть ли фильтрация по именам до открытия файлов и чнения хедеров? Представим, я тупой юзверь, и запустил вот такую программу:
Админ асилит стока файлов? --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Просто нужно еще на стороне клиента проверять - правильный файл или нет.
|
|||
|
||||
| bems |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
админ - не знаю, сетка - с трудом
Это сообщение отредактировал(а) bems - 27.5.2006, 17:35 -------------------- Обижено школьников: 8 |
||||||
|
|||||||
| Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 6 Всего: 7 |
Я ж совсем другое предлагал.. Предлагал ввести CRC в имя, чтоб валидность его можно было проверить, не открывая файл. Вот, накропал пример. Там использовал чуть измененный CRC32 - изменил сам полином, и начальное число. Плюс ещё данные XOR'ю ключом. Не думаю, что найдется у вас юзверь, что этот хаш сможет сгенерить без ковыринга в сорцах. Вот образцы валидных сгенеренных имен. 200605281950437127B0974C8.ext 2006052819505540079C9687D.ext 20060528195104150BF12C7CA.ext А по ходу нашел забойную книжу! Советую всем, кто хочет в CRC разобраться Ross N. Williams "Элементарное руководство по CRC алгоритмам обнаружения ошибок" Присоединённый файл ( Кол-во скачиваний: 3 )
FileNameValidator.zip 3,20 Kb--------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Я тебя отлично понял
А что делать если имя мое, а содержимое левое? Я имею ввиду, что все равно придется проверять валидность содержимого на стороне клиента. А твой способ - как один из этапов я использую. За книжку и исходник огромное спасибо. И плюс -------------------- Обижено школьников: 8 |
|||
|
||||
| Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 6 Всего: 7 |
Нема за що. Тема просто интересная.
Добавлено @ 21:25 --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |