Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> копирование файла, как корректно скопировать?? 
:(
    Опции темы
heskey
Дата 25.8.2005, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 3.12.2004

Репутация: нет
Всего: нет



Нужно произвести корректное копирование, то есть по байтно. smile: Если файлы полностью идэнтичны и совпали, то можно копировать..а если хоть один символ отличается, то нет! Для примера файл текстовый.
стандартная апи-функция CopyFile заменяет файл, затирая все предыдущее. Жду помощи. Спасибо.
PM MAIL   Вверх
_hunter
Дата 25.8.2005, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



открываеш два TFileStream' a; сравниваеш их размеры -- если совпали -- идеш дальше; в цикле сверяеш каждый байт, если один не совпал -- выход...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
heskey
Дата 25.8.2005, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 3.12.2004

Репутация: нет
Всего: нет



это методом потока? я видел пример.

Код

Procedure FileCopy(Const SourceFileName, TargetFileName: String); 
Var 
  S,T   : TFileStream; 
Begin 
 S := TFileStream.Create(sourcefilename, fmOpenRead ); 
 try 
  T := TFileStream.Create(targetfilename, fmOpenWrite or fmCreate); 
  try 
    T.CopyFrom(S, S.Size ) ; 
    FileSetDate(T.Handle, FileGetDate(S.Handle)); 
  finally 
   T.Free; 
  end; 
 finally 
  S.Free; 
 end; 
end;


а какой функцией произвести сравнение?
PM MAIL   Вверх
_hunter
Дата 25.8.2005, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



пример -- не в тему, а сравнить простым =
т.е. читаеш из одного потока один символ, из другого один и сравнивай


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
heskey
Дата 25.8.2005, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 3.12.2004

Репутация: нет
Всего: нет



да..все, я понял! Read до конца файла..и сравнение.Спасибо большое. А почему именно Стримом? Ведь можно обычными средствами тогда..как на Паскале еще smile
PM MAIL   Вверх
Snowy
Дата 25.8.2005, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Потому что так быстрее и корректней.
PM MAIL   Вверх
heskey
Дата 25.8.2005, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 3.12.2004

Репутация: нет
Всего: нет



У меня 10 кб файл минут 5 сравнивается. Хотя должно быть за секунду smile
PM MAIL   Вверх
_hunter
Дата 25.8.2005, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



кто тебе сказал? smile неоптимизированное чтение по байту... хотя 5мит тоже многовато...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Poseidon
Дата 25.8.2005, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 10
Всего: 133



Цитата(heskey @ 25.8.2005, 14:25)
Если файлы полностью идэнтичны и совпали, то можно копировать..а если хоть один символ отличается, то нет!
http://vingrad.ru/DELPHI-DLP-001012



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Romikgy
Дата 26.8.2005, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Лучше читать по 512 байт , а потом сравнивать в памяти smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Snowy
Дата 26.8.2005, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Тогда уж сразу целиком в память глотать smile
Д а какая разница. В XP все равно упреждающее чтение на стримы работает.
Говоришь "читать байт", а у тебя уже полфайла закэшировано.
PM MAIL   Вверх
Poseidon
Дата 26.8.2005, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 10
Всего: 133



Цитата(Romikgy @ 26.8.2005, 09:52)
Лучше читать по 512 байт , а потом сравнивать в памяти
А это уже смотря с какой стороны посмотреть. Если предпологается, что одинаковых файлов много, то тогда лучше выбрать больший размер буфера. Если же эдентичных файлов будет мало, то буфер лучше уменшить. Почему? Все просто. Читаем допустим 16 байт, сравниваем и оп-па. Не одинаковые. Все, разница найдена. А так бы пришлось искать эту разницу читая 512 байт. А когда файлов тысячи? Время-деньги так сказать. Да и ресурсы занимаются. Так что как лучше решать кодеру, а не нам, исходя из того, где, кем, как и т.п. будет применятся его программа.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Romikgy
Дата 30.8.2005, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(Poseidon @ 26.8.2005, 17:55)
А это уже смотря с какой стороны посмотреть. Если предпологается, что одинаковых файлов много, то тогда лучше выбрать больший размер буфера. Если же эдентичных файлов будет мало, то буфер лучше уменшить. Почему? Все просто. Читаем допустим 16 байт, сравниваем и оп-па. Не одинаковые. Все, разница найдена. А так бы пришлось искать эту разницу читая 512 байт. А когда файлов тысячи? Время-деньги так сказать. Да и ресурсы занимаются. Так что как лучше решать кодеру, а не нам, исходя из того, где, кем, как и т.п. будет применятся его программа.

Смысл здеся в другом, при обращении к винту, считывается один или более секторов, а сектор и есть (как правило) 512 байт smile
То бишь даже при чтении 16 байт , считывается сектор = 512 smile
Плюс есть еще и кеширование, но про него не знаю сколько он кидает в память smile не было придлога с ним сталкнится.


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0563 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.