Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Copy File


Автор: Scrip 21.6.2004, 14:50
Как прoграммно скопировать файл с одного места в другое (на компе).

Автор: SlaUr 21.6.2004, 14:58
Несколько вариантов копирования файлов есть в модуле http://slaur.narod.ru/delphi/mysys.rar

Автор: ~FoX~ 21.6.2004, 15:00
Код

procedure TForm1.Button1Click(Sender: TObject);
var
 d: LongBool;
begin
 CopyFile(PChar('c:\123.txt), PChar('c:\temp\123.txt'), d);
end;


Добавлено @ 15:01
SlaUr
Я не успел biggrin.gif

Автор: Scrip 21.6.2004, 15:58
Для чего нужна переменная d

Автор: <Spawn> 21.6.2004, 16:54
F1 гласит:

Код
bFailIfExists

Specifies how this operation is to proceed if a file of the same name as that specified by lpNewFileName already exists. If this parameter is TRUE and the new file already exists, the function fails. If this parameter is FALSE and the new file already exists, the function overwrites the existing file and succeeds.


То есть это значит, что если этот параметр будет равен True, то функция завершится с ошибкой, если такой файл существует, с False ошибки не будет - файл перезапишется.

П.С. Нужно учиться хелпом пользоваться.

Автор: Петрович 21.6.2004, 20:20
Цитата
То есть это значит, что если этот параметр будет равен True, то функция завершится с ошибкой, если такой файл существует, с False ошибки не будет - файл перезапишется.

В таком случае, d надо обязательно инициализировать, либо передавать неаосредственно константу, например:
Код
procedure TForm1.Button1Click(Sender: TObject);
begin
CopyFile(PChar('c:\123.txt), PChar('c:\temp\123.txt'), True);
end;

Автор: dm9 21.6.2004, 22:50
http://forum.vingrad.ru/index.php?showtopic=18334&hl=%F1%EA%EE%EF%E8%F0%EE%E2%E0%F2%FC

Автор: ~FoX~ 22.6.2004, 08:22
Петрович Да неееет!!

Если процедура не сработала, то в переменную D попадает True. И по ластеррор можешь посмотреть что случилос!
А если все прошло хорошо, то в D попадает False

Автор: Петрович 22.6.2004, 09:02
Цитата
Если процедура не сработала, то в переменную D попадает True. И по ластеррор можешь посмотреть что случилос!
А если все прошло хорошо, то в D попадает False

Шустрый, ты не прав smile.gif.
Читай исходный коментарий к параметру (на англицком)! Там ясно сказано. Кроме того, посмотри как он определен:
Код
BOOL bFailIfExists          // operation if file exists

- это параметр-значение (не var параметр), следовательно он даже не может веруть никакой результат!
Да и в WinAPI принято результат выполнения действия возвращать как результат функции.

Автор: Albinos_x 22.6.2004, 09:14
// создаю поток чтения записи файлов
Source:=TFileStream.Create(s,fmOpenRead);
// блок нормального завершения работы в случае ошибки
try
// создаю потоком новый файл
Target:=TFileStream.Create(s1,fmCreate);
try
// копирую файл
Target.CopyFrom(Source,0)
finally
// уничтожаю поток
// выполнится даже если возникнет ошибка
Target.Free;
end;
finally
// уничтожаю поток
// выполнится даже если возникнет ошибка
Source.Free;
end;
end;

Автор: ~FoX~ 22.6.2004, 11:05
Петрович
Ты прав!
Прошу прощения, эт я по запарке!!! withstupid.gif

Автор: Medved 23.6.2004, 13:59
А не проще ли посмотреть FAQ? http://forum.vingrad.ru/index.php?showtopic=22229

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)