![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте господа.
Поиском пользовался, не нашел, Delphi выбрал по принадлежности к Паскалю. Прошу не пинать, отнестись с пониманием. Задача такая, выбираем файл на диске (bin), определяем участок файла для исследования двумя значениями "Старт Адрес" и "Стоп Адрес", начало области не обязательно должно совпадать с началом файла и вводим еще одно контрольное значение (в моем случае это контрольная сумма). Программа подсчитывает К.С. обозначенного участка, сравнивает с контрольным значением, если совпадения нет, то "Старт Адрес" увеличиваем на один и так далее. Вот набросок: Код:
lmikle: Пользуемся тегами! (вначале хочу научиться загружать и выделять участок файла, а потом и дальше можно) Почитав и подумав решил работать с выбранным файлом через FileStream ибо там проще и обозначить "Старт Адрес" - смещение и "Стоп Адрес" как размер ("Стоп Адрес" минус "Старт Адрес"), но вот опыта нет для загрузки выбранного файла в поток. Если у вас есть идеи ли в моем выборе есть ошибка, прошу подсказать. Если есть ссылка на пример похожий на мою задачу (основная загвоздка в загрузке файла и выделение участка файла), буду весьма признателен. Извините если мой вопрос несуразен или примитивен. |
#2
|
|||
|
|||
![]() что-то типа такого:
Код:
|
#3
|
|||
|
|||
![]() Спасибо уважаемый lmikle, принцип понял.
За правку сообщения благодарю, исправлюсь. |
#4
|
|||
|
|||
![]() Долго не спрашивал, просто пытался сам, но...
Последний раз редактировалось LIC, 24.07.2009 в 23:22. |
#5
|
|||
|
|||
![]() Доброе время суток.
Благодаря подсказке уважаемого lmikle освоил и реализовал FileStream поток, смог решить свою задачу, но вот возникла новая проблема. После открытия исследуемого файла пр-рой OpenDialog создаем новый файл при помощи FileStream нужного размера и проверяем CRC, если есть не равенство с искомым, то создаем новый файл с размером меньше на один байт и так по кругу. Но после определенного круга Windows выдает ошибку, что не может найти исходный файл, в чем проблема, может кто сталкивался. Код:
Это один из вариантов, пробовал разные варианты. Где моя ошибка? Подскажите пожалуйста. |
#6
|
|||
|
|||
![]() Навскидку:
1. Stream2 := TFileStream.Create('Temp.tmp', fmCreate, fmOpenWrite); -> Stream2 := TFileStream.Create('Temp.tmp', fmCreate); 2. InFile.Destroy; -> InFile.Free; 3. Вообще, у тебя что-то мудренно все делается. Во первых, можно не создавать файл, а использовать поток в памяти - TMemoryStream. И во вторых - незачем переписывать файл кучу раз, найди готовый алгоритм расчета crc32, который будет нормально работать с потоками. |
#7
|
|||
|
|||
![]() Ну мудрено получилось, так это от не знания языка, когда знаешь, то получается коротко и красиво, а вот алгоритм CRC32 пришлось писать самому, ну не в корне, а по мелочам. Да и ошибка у меня не с вновь созданным файлом (Temp.tmp), а именно с файлом исходником,
OpenDialog1.FileName. Спасибо, извините если описываю сумбурно. |
#8
|
|||
|
|||
![]() Спасибо уважаемый lmikle, вы помогли мне начать мою программу. Ошибку устранил, но программа работает не стабильно, но думаю отладить получится. Мой маленький опыт и моя ошибка, то на что даже не обращал внимание:
1. Надо правильно организовывать циклы в процедуре, 2. Пользуйтесь всем спектром услуг и утилит, которые предоставляет Borland, мне помог монитор "Стек Вызовов", у меня одна процедура не закрвалась после отработки и открывалась снова и снова. Может как всегда сумбурно, но от души. Спасибо. |
#9
|
|||
|
|||
![]() У тебя в корне неправильно делается.
Входной файл должен быть открыть 1 раз. Далее ты должен в цикле взять данные куда-то из него и обработать. По результатам обработки ты должен решить - надо ли продолжать цикл и с какими параметрами. Все. |