Вторник, 23.04.2024, 16:39
AMAR Inc.
Приветствую Вас Гость | RSS
Главная Программирование Регистрация Вход
Меню сайта

Категории каталога
Разные статьи [48]
Система [62]

Главная » Статьи » Delphi » Разные статьи

Копирование и удаление файлов в Delphi
  В самом простом случае вопрос копирования файлов очень прост (хотя поступило много пожеланий рассказать именно об этом)! Для этого достаточно посмотреть в хелп по Delphi :))

Копирование файлов

   В Delphi есть функция CopyFile. Вот ее описание из хелпа
BOOL CopyFile(
LPCTSTR lpExistingFileName, // pointer to name of an existing file
LPCTSTR lpNewFileName, // pointer to filename to copy to
BOOL bFailIfExists // flag for operation if file exists   );

   Параметры передаваемые в эту функцию:
Указатель на имя существующего файла (нуль терминированная строка т.е. тип PChar! )
Указатель на имя файла, который будет создан/перезаписан после копирования (нуль терминированная строка т.е. тип PChar! )
   Если этот параметр True и файл с таким именем уже существует, то функция вернет False. Если же файл, с именем указанным во втором параметре существует и в качестве третьего параметра передан False - то функция перезапишет файл и благополучно завершится.
   Приведу небольшой пример использования этой функции. Создайте на диске C: файл '1.txt', а на форму поставьте кнопку:

procedure TForm1.Button1Click(Sender: TObject);
begin
  if CopyFile('c:1.txt','c:2.txt',true) then
    ShowMessage('Файл успешно скопирован!')
  else ShowMessage('Неудача!');
end;

   Для того, чтобы точнее узнать при возникновении ошибки, что же все таки произошло, надо воспользоваться функцией GetLastError, которая возвращает код последней ошибки (формат DWORD). Теперь мы немного изменим пример:

procedure TForm1.Button1Click(Sender: TObject);
begin
  if CopyFile('c:1.txt','c:2.txt',true) then
    ShowMessage('Файл успешно скопирован!')
  else
  ShowMessage('Ошибка! Вот ее код: '+IntToStr(GetLastError));
end;

   Таким образом нажав второй раз на кнопку мы получим сообщение: "Ошибка! Вот ее код: 80". Это говорит нам, что файл существует.
   Коды всех ошибок можно легко найти в хелпе.

   Для углубления рассматриваемого вопроса приведу пример копирования файлов с помощью файлового потока (TFileStream). В приведенной пользовательской функции введены два дополнительных параметра From и Count, которые указывают, соответственно, с какого и по какой байт нужно копировать файл. Если необходимо скопировать весь файл, то необходимо передать нули. Вот код этой функции:

function MyCopyFile( InFile,OutFile: String; From,Count: Longint ): Longint;
var InFS,OutFS: TFileStream;
begin
  InFS := TFileStream.Create( InFile, fmOpenRead );//создаем поток
  OutFS := TFileStream.Create( OutFile, fmCreate );//создаем поток
  InFS.Seek( From, soFromBeginning );//перемещаем указатель в From
  Result := OutFS.CopyFrom( InFS, Count );
  InFS.Free;//освобождаем
  OutFS.Free;//освобождаем
end;

Удаление файлов

   Для удаления файлов в Delphi так же предусмотрена специальная процедура DeleteFile. В качестве параметра, передаваемого в функцию, выступает строка типа PChar, указывающая имя файла, который нужно удалить. Сразу предлагаю Вам простой пример на использование этой функции:

procedure TForm1.Button1Click(Sender: TObject);
begin
  if DeleteFile('c:2.txt') then
    ShowMessage('Файл успешно удален!')
  else ShowMessage('Ошибка! Вот ее код: '+IntToStr(GetLastError));
end;

Удаление пустой директории

   Чтобы удалить пустую директорию с помощью Delphi достаточно обратиться к функции RemoveDir.
function RemoveDir(const Dir: string): Boolean;

   Эта функция возвращает True если директория, указанная в единственном параметре, передаваемом в функцию, успешно удалена, в противном случае функция возвратит False.

   Часто возникает необходимость удалить непустую папку, содержащую не только файлы, но и другие вложенные папки. Для этого была написана пользовательская функция, удаляющая папку со всеми файлами и поддиректориями. Вот она:

function MyRemoveDir(sDir : String) : Boolean;
var iIndex : Integer;
      SearchRec : TSearchRec;
      sFileName : String;
begin
  Result := False;
  sDir := sDir + '*.*';
  iIndex := FindFirst(sDir, faAnyFile, SearchRec);
  while iIndex = 0 do
  begin
    sFileName := ExtractFileDir(sDir)+''+SearchRec.Name;
    if SearchRec.Attr = faDirectory then
    begin
      if (SearchRec.Name <> '' ) and (SearchRec.Name <> '.') and
        (SearchRec.Name <> '..') then
        MyRemoveDir(sFileName);
    end else
    begin
      if SearchRec.Attr <> faArchive then
        FileSetAttr(sFileName, faArchive);
      if NOT DeleteFile(sFileName) then
        ShowMessage('Could NOT delete ' + sFileName);
    end;
    iIndex := FindNext(SearchRec);
  end;
  FindClose(SearchRec);
  RemoveDir(ExtractFileDir(sDir));
  Result := True;
end;

   А сейчас пример использования этой функции:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if MyRemoveDir('C:testDir') then
    ShowMessage('Директория успешно удалена')
  else ShowMessage('Не получается удалить директорию');
end;

Общие замечания по данной теме

   Перед копированием или удалением файлов всегда проверяйте его наличие функцией FileExists:

  if FileExists('c:1.txt') then
  if CopyFile('c:1.txt','c:2.txt',true) then
    ShowMessage('Файл успешно скопирован!')
   Чтобы использовать в функциях CopyFile и DeleteFile имена файлов полученные с помощью, например, OpenDialog, надо из привести к типу PChar:

  if CopyFile(Pchar(OpenDialog1.FileName),Pchar(SaveDialog1.FileName),true) then ...
   Всегда следите за именами файлов, используемых в функциях. Обращайте внимание на абсолютные и относительные пути. Из-за этого часто возникают ошибки, которые сложно отследить!

   Ну вот наверно и все, что я хотел бы рассказать Вам о копировании и удалении в Delphi.


Категория: Разные статьи | Добавил: amar-runyak (11.10.2007)
Просмотров: 14092 | Комментарии: 8 | Рейтинг: 4.8/4 |

Всего комментариев: 81 2 »
8 paytightihos  
0
hi

7 TjfdEUo  
0
>>>
Взлом почты на заказ
Быстро. Качественно. Недорого.
http://on-mail.ru/
>>>
Взлом почты на заказ
Быстро. Качественно. Недорого.
http://on-mail.ru/
>>>
Взлом почты на заказ
Быстро. Качественно. Недорого.
http://on-mail.ru/
>>>
Взлом почты на заказ
Быстро. Качественно. Недорого.
http://on-mail.ru/
>>>
Взлом почты на заказ
Быстро. Качественно. Недорого.
http://on-mail.ru/
>>>
Взлом почты на заказ
Быстро. Качественно. Недорого.
http://on-mail.ru/
>>>

6 swoy45  
0
а как обозначается папка, в которой лежит данная программа (которая копирует файл)?

5 СуперМен  
0
Благодарю за код.
Ради него пол инета перерыл.
Побольше бы таких хороших людей :)
Вы спасли мой Курсовик

4 Serge_else  
0
Спасибо помогло

1-5 6-8
Имя *:
Email *:
Код *:
Форма входа

Поиск

Друзья сайта

Статистика

Copyright AMAR Inc. © 2024