Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Побайтное копирование файла!


Страницы:   1 2

grigory ©   (2005-08-25 15:45:00) 

Нужно произвести корректное копирование, то есть по байтно. : Если файлы полностью идэнтичны и совпали, то можно копировать..а если хоть один символ отличается, то нет! Для примера файл текстовый.
стандартная апи-функция CopyFile заменяет файл, затирая все предыдущее. Жду помощи. Спасибо.


Zeqfreed   (2005-08-25 16:21:00) [21]

Побайтное копирование + побайтное сравнение будут несколько заторможенно работать.
Как один из вариантов, можно считать контрольные суммы для файлов и сравнивать их, но для больших файлов они считаются так же достаточно долго.

Мне кажется, самым оптимальным решением будет загрузка файлов в память и их сравнение спомощью CompareMem. Или для экономии памяти можно использовать поблочное сравнение, например, блоками по 1 Кб.


OldNaum   (2005-08-25 16:14:00) [22]

вначале проверяешь идентичность файлов (hash'ем к примеру), потому принимаешь решение о дальнейшей работе. копировать или нет ) к чему такой мутор то?


grigory   (2005-08-25 16:14:00) [23]

ой..тут конечно же глюки в цикле будут..так как сравнение каждый с каждым идет а не параллельно..но суть вроде такая.


grigory   (2005-08-25 16:06:00) [24]

ну вот например есть файл 1.txt..он содержит в себе "12345"
и есть файл 2.txt..он содержит "12045"
Вот я должен проверить побайтно, и увидев что они отличаются в 3 байте, копирование не производить.
Вот мой пример.
procedure TForm1.Button1Click(Sender: TObject);
Var
 S,T   : TFileStream;
 s1,t1:char;
 i,j:integer;
Begin
S := TFileStream.Create('\\Vng\TEMP\Альпагор спорт\Логотип Альпагор\text.txt', fmOpenRead );
try
 T := TFileStream.Create('c:\Мои документы\SQL\text.txt', fmOpenWrite or fmCreate);
 try
   for i:=1 to s.size do begin
   for j:=1 to t.size do begin
     s.Read(s1,1);
     T.Read(t1,1);
     if t1<>s1 then exit
   end;
   end;
   T.CopyFrom(S, S.Size ) ;
   FileSetDate(T.Handle, FileGetDate(S.Handle));
 finally
  T.Free;
 end;
finally
 S.Free;
end;
end;

не знаю правильно ли...


Poirot   (2005-08-25 15:55:00) [25]

Мда, подробнее можно!если файлы идентичны, то зачем копировать?!
или я как-то не так понял вопрос:)


alpet   (2005-08-25 15:55:00) [26]

А в чем проблемы?
Все вполне эффективно может быть реализовано с использованием TFileStream (или если уж хочется чистого API - c помощью File Mapping).


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо