Форум: "Основная";
Текущий архив: 2005.10.02;
Скачать: [xml.tar.bz2];
ВнизСкопировать файл с заменой Найти похожие ветки
← →
kMax (2005-09-05 10:12) [0]Мастера помогите ! очень надо, как программно скопировать файл
с одной папки в другую без предупреждений о замене файла. Спасибо..
← →
begin...end © (2005-09-05 10:14) [1]CopyFile с параметром bFailIfExists = False.
← →
Big Joe © (2005-09-05 10:20) [2]Если надо будет скопировать все файлы и подкаталоги..
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;
← →
Попов Виталий (2005-09-06 09:15) [3]Вот пример, наверное попроще.
Правда на 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;
← →
kMax (2005-09-06 10:15) [4]2 Big Joe
А где в вашей функции нужно установить чтобы заменяла? Скажите
пожалуйста...
← →
Anderson2005 (2005-09-06 10:30) [5]Есть такая функция в Дельфи Rename посмотри
← →
alex_*** (2005-09-06 14:06) [6]посмотри [1]
← →
Попов Виталий (2005-09-06 16:37) [7]В примере [3] ничего больше устанавливать не надо, файлы заменяются без проблем, кроме некоторых случаев:
Исходный или заменяемый файл используются, заменяемый файл имеет признак "Только чтение". Но в этих случаях функция CopyFile тоже не заменяет. Во втором случае, для того, чтобы файл был заменен новым надо снимать признак "Только чтение". А вообще, я наверное, соглашусь с людьми, что вариант [1] проще. Можно так написать (это если не брать в расчет ситуации рассмотренные выше):
Procedure CopyFile( InFile,OutFile);
begin
CopyFile(PChar(InFile), Pchar(OutFile), false);
end;
← →
Попов Виталий (2005-09-06 17:11) [8]попробовал [2]-работает лучше, уже не обращает внимание на "Только чтение". Только надо убрать один параметр, чтобы заменял, строку:
fFlags:= FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
надо писать так:
fFlags:= FOF_NOCONFIRMATION;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.10.02;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c