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

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

Скопировать файл с заменой [D7, WinXP]


kMax ©   (2005-09-05 10:12:00) 

Мастера помогите ! очень надо, как программно скопировать файл
с одной папки в другую без предупреждений о замене файла. Спасибо..


Попов Виталий   (2005-09-06 17:11:00) [1]

попробовал [2]-работает лучше, уже не обращает внимание на "Только чтение". Только надо убрать один параметр, чтобы заменял, строку:
fFlags:= FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
надо писать так:
fFlags:= FOF_NOCONFIRMATION;


Попов Виталий   (2005-09-06 16:37:00) [2]

В примере [3] ничего больше устанавливать не надо, файлы заменяются без проблем, кроме некоторых случаев:
Исходный или заменяемый файл используются, заменяемый файл имеет признак "Только чтение". Но в этих случаях функция CopyFile тоже не заменяет. Во втором случае, для того, чтобы файл был заменен новым надо снимать признак "Только чтение". А вообще, я наверное, соглашусь с людьми, что вариант [1] проще. Можно так написать (это если не брать в расчет ситуации рассмотренные выше):

Procedure CopyFile( InFile,OutFile);
begin
 CopyFile(PChar(InFile), Pchar(OutFile), false);
end;


alex_***   (2005-09-06 14:06:00) [3]

посмотри [1]


Anderson2005   (2005-09-06 10:30:00) [4]

Есть такая функция в Дельфи Rename посмотри


kMax   (2005-09-06 10:15:00) [5]

2 Big Joe
А где в вашей функции нужно установить чтобы заменяла? Скажите
пожалуйста...


Попов Виталий   (2005-09-06 09:15:00) [6]

Вот пример, наверное попроще.
Правда на D5, но думаю должен работать и на семерке.

function CopyFile( InFile,OutFile: String; From,Count: Longint ): Longint;
 var
   InFS,OutFS: TFileStream;
 begin
 try
   InFS  := TFileStream.Create( InFile,  fmOpenRead );
   OutFS := TFileStream.Create( OutFile, fmCreate   );
   InFS.Seek( From, soFromBeginning );
   Result := OutFS.CopyFrom( InFS, Count );
  finally
   InFS.Free;
   OutFS.Free;
  end;
 end;


Big Joe   (2005-09-05 10:20:00) [7]

Если надо будет скопировать все файлы и подкаталоги..

procedure TForm1.Button1Click(Sender: TObject);
var
 OpStruc: TSHFileOpStruct;
 frombuf, tobuf: array [0..128] of Char;
begin
 FillChar( frombuf, Sizeof(frombuf), 0 );
 FillChar( tobuf, Sizeof(tobuf), 0 );
 StrPCopy( frombuf, 'c:\1\*.*' );
 StrPCopy( tobuf, 'c:\2' );
 with OpStruc do
 begin
   Wnd:= Handle;
   wFunc:= FO_COPY;
   pFrom:= @frombuf;
   pTo:=@tobuf;
   fFlags:= FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
   fAnyOperationsAborted:= False;
   hNameMappings:= nil;
   lpszProgressTitle:= nil;
 end;
 ShFileOperation( OpStruc );
end;


begin...end   (2005-09-05 10:14:00) [8]

CopyFile с параметром bFailIfExists = False.


Наверх

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