![]() |
|
|
![]()
|
|
| Dreamuchiy |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 26.12.2006 Репутация: нет Всего: -1 |
Нужно открыть 2 файла и сравнить содержимое и длину друг с другом,
и так чтобы сравнение происходило по байтам споследующим выводом содержимого в HEX или DEC виде на форму? Проще говоря как открыть файл и считать из него байт в переменную? --------------------
Мечтаю написать в карман Биллу Гейтсу... Или как минимум посмотреть крах Майкрософт... |
|||
|
||||
| RatHat |
|
|||
![]() Вождь индейцев ![]() Профиль Группа: Участник Сообщений: 234 Регистрация: 5.9.2005 Репутация: -1 Всего: 1 |
проще руками написать, чем компоненты искать. По крайней мере, будешь точно знать, как оно работает)
считываешь файлы в две переменные, например, типа String, а потом просто по циклу прогоняешь... Чтобы длину сравнить :
и всё в таком ключе Если хочешь, напишу полный код, но в чём тогда будет интрига --------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i |
|||
|
||||
| sp75 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 17.5.2007 Репутация: 1 Всего: 1 |
String не пройдет для всего, говоря попроще, только для текстовых файлов. Надежно и для любых файлов будет вот так: TMemoryStream *File1_Stream , *File2_Stream ; File1_Stream = new TMemoryStream(); File2_Stream = new TMemoryStream(); File1_Stream->LoadFromFile("c:\\1.dat") ; File2_Stream->LoadFromFile("c:\\2.dat") ; if(File1_Stream->Size == File2_Stream->Size ) { unsigned char *Buff1 = new unsigned char[File1_Stream->Size]; unsigned char *Buff2 = new unsigned char[File2_Stream->Size]; File1_Stream->Read(Buff1, File1_Stream->Size); File2_Stream->Read(Buff2, File2_Stream->Size); if(memcmp(Buff1, Buff2, File2_Stream->Size)!=0) { ShowMessage("Содержимое файлов разное") ; } for(int a=0; a<File1_Stream->Size;a++) { if(Buff1[a]!=Buff2[a]) Memo1->Lines->Add("В позиции - "+IntToStr(a)+" есть отличия :" +IntToHex(Buff1[a],2)+"!="+ IntToHex(Buff2[a],2)) ; } } else ShowMessage("Размеры Файлов разные") ; delete File1_Stream; delete File2_Stream; delete Buff1; delete Buff2; Это сообщение отредактировал(а) sp75 - 22.5.2007, 08:50 |
||||
|
|||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
sp75, мне кажется на больших файлах будет жирновато каждый из них дважды держать в памяти - один раз в потоке, второй раз в буфере для сравнения. На небольших сойдет, конечно, но если файлы метров по 200...
|
|||
|
||||
| sp75 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 17.5.2007 Репутация: 1 Всего: 1 |
Сравнивать 200 метров я думаю не будут. Можно убить delete File1_Stream; delete File2_Stream; после загрузки в буфер перд тем сохранив в переменную int длину файлов. Пускай читает по 1 байту с char buff_s[1]; int iFileHandle = FileOpen(OpenDialog1->FileName, fmOpenRead); FileRead(iFileHandle, buff_s, 1); .............. Будет медленее Это сообщение отредактировал(а) sp75 - 22.5.2007, 09:29 |
|||
|
||||
| RatHat |
|
|||
![]() Вождь индейцев ![]() Профиль Группа: Участник Сообщений: 234 Регистрация: 5.9.2005 Репутация: -1 Всего: 1 |
sp75, я же написал "например, типа String", а не "обязательно, типа String"
А вообще, строковый тип понимает все символы, если я правильно помню. --------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
||||
|
||||
| sp75 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 17.5.2007 Репутация: 1 Всего: 1 |
Неа String, AnsiString - не все понимает токо текс который закончится \0 , плюс до того ловит форматирование текста табуляцию \t , след строку \n. Загрузив в тип String не текстовые данные (например екзешник захочется сравнить) он их исковеркает, и сказит информацию тоесть отформатирует |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
||||
|
||||
| RatHat |
|
|||
![]() Вождь индейцев ![]() Профиль Группа: Участник Сообщений: 234 Регистрация: 5.9.2005 Репутация: -1 Всего: 1 |
Anikmar, есть такое. я для такого случая функцию писал. --------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i |
|||
|
||||
![]()
|
| Правила форума "С++ 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. |