![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Побайтное копирование файла!
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).