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


Автор: NEO_7 4.11.2006, 00:07
Здрасте может мой вопрос покажется вам глупым но я только начал программировать.
Вопрос вот какой даже скорее не вопрос а просьба вот нашел пару методов копирование но просто не могу разобраться что к чему напишите пожалуйста с описанием и желательно примером где что надо вписать.
Я за место SourceFileName вписываю имя диска откуда копировать он мне ошибку пишет при компиляции имя файла тоже ошибку, Что и как там надо написать,,,,


Копирование методом потока 

Код

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; 


Копирование методом LZExpand 

Код

uses LZExpand; 
procedure CopyFile(FromFileName, ToFileName  : string); 
var 
  FromFile, ToFile: File; 
begin 
  AssignFile(FromFile, FromFileName); 
  AssignFile(ToFile, ToFileName); 
  Reset(FromFile); 
  try 
   Rewrite(ToFile); 
   try 
    if LZCopy(TFileRec(FromFile).Handle, TFileRec(ToFile).Handle)<0 then 
     raise Exception.Create('Error using LZCopy') 
   finally 
    CloseFile(ToFile); 
   end; 
  finally 
   CloseFile(FromFile); 
  end; 
end;


Автор: Snowy 4.11.2006, 00:30
Цитата(NEO_7 @  4.11.2006,  01:07 Найти цитируемый пост)
Я за место SourceFileName вписываю имя диска откуда копировать
А нужно имя файла.

Автор: bagira 4.11.2006, 23:14
Цитата(Snowy @  4.11.2006,  02:30 Найти цитируемый пост)
А нужно имя файла.

... полное, вместе с путем smile

Автор: Zlo 5.11.2006, 00:42
Дык он наверное в самой функции пишет пути...
Функцию вставь в код программы сразу после слова
Код

implementation

а по событию кнопки, напиши вызов этой функции, примерно так:

Код

FileCopy('С:\1.txt, 'E:\123.txt');

Автор: NEO_7 5.11.2006, 00:48
Напишите пример с русским описание пожалуйста что б понять раз и навсегда как это делать… Конечно если не трудно.

Автор: Matematik 5.11.2006, 11:36
Дык уже ответили, по-русски.
Что не понятно?

Автор: Zero 5.11.2006, 11:54
NEO_7, я надеюсь ты не в функции меняешь заголовок...
Надо именно скопировать твою функцию в редактор после слова  implementation  в том виде в каком она есть у тебя.
а далее положить на форму кнопку, сделать по ней двойной щелчок левой кнопкой мыши, в результате у тебя в редактор добавится обязательная часть кода на событие нажатия кнопки, и в нутрь между begin end добавь строку типа:
Код

FileCopy('С:\111.txt, 'С:\222.txt');

При этом файл 111.txt должен за ранее быть создан срествами Windows, на диске C:
После компиляции и нажатия на кнопку, ты увидешь на диске C: файл с именем 222.txt

Автор: Desperate 5.11.2006, 16:33
Есть такой еще варианты копирования 
1-ый вариант
Код

path:='c:\123.mp3';
 copyfile(pchar('path'),pchar('d:\vasya\'+ExtractFileName(path)),true);
{переменная Path типа String 
ExtractFileName(path) функция возвращает имя файла с расширением}


2-ой вариант
Код

.....
var
  FromF, ToF: file;
  NumRead, NumWritten: Integer;
  Buf: array[1..1024] of Char;
begin
 AssignFile(FromF, path_open);{path_open переменная с полным путем к файлу источнику. Например 'c:\123.mp3'}
    Reset(FromF, 1);
 AssignFile(ToF, path_save);{path_save переменная с полным путем к файлу приемнику. Например 'd:\vasya\music.mp3'}
        Rewrite(ToF, 1);
 repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToF, Buf, NumRead, NumWritten);
until (NumRead = 0) or (NumWritten <> NumRead);
CloseFile(FromF);
CloseFile(ToF);
......
end;

но учти оба варианта работают если путь к файлу приемника существует т.е. каталоги а сам файл создается в процессе, если каталога не будет какого нибудь случится нехорошо! 
второй вариант в ХР не хочет копировать с CD
ПС:Чтоб скопировать полностью все файлы в подкаталоге или с CD нужно еще дописать процедурку составляющюю полный список файлов в каталоге и подкаталогах

Автор: NEO_7 5.11.2006, 18:21
Все спасибо огромное всем что помогли… Просто можно сказать я пару дней делфи занимаюсь поэтому все так сложно и непонятно но разобрался благодаря вам!!!!!!

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