お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"Directoryの移動"



みなさん、こんにちは。

NT351ではWindows95やNT4.0で使うことのできる「SHFileOperation」が使えない
のでフォルダ(ディレクトリ)まとめての移動が出来ません。
そこで作ったのが以下の関数です。

皆さんの添削をお待ちしております(^^)



//ディレクトリをディレクトリ配下に移動する
//FromDir=移動元のディレクトリ
//ToDir=移動先のディレクトリ
function MoveDirectory(FromDir,ToDir:TFileName):Boolean;
var
 FDir,TDir,NewDir,SearchPath:TFileName;
 FromFileName,ToFileName:TFileName;
 FAttr:Integer;
 FSearchRec:TSearchRec;
 FHandle:THandle;
begin
 Result := False;
 if FromDir[Length(FromDir)] = '\' then SearchPath := FromDir
 else SearchPath := FromDir + '\';
 FDir := '\'+ExtractFileName(FromDir);
 if ToDir[Length(ToDir)] = '\' then TDir := Copy(ToDir,1,Length(ToDir)-1)
 else TDir := ToDir;
 NewDir := TDir+FDir;
 if NewDir[Length(NewDir)] <> '\' then NewDir := NewDir + '\';
 if not DirectoryExists(NewDir) then
 begin
  Result := CreateDir(NewDir);
  if not Result then Exit;
 end;
 FAttr := faReadOnly or faHidden or faSysFile
       or faDirectory or faArchive or faAnyFile;
 FHandle := FindFirst(PChar(SearchPath+'*.*'),FAttr,FSearchRec);
 try
  if FHandle = 0 then
  begin
   repeat
    if (FSearchRec.Attr and faDirectory) > 0 then
    begin
     if FSearchRec.Name[1] <> '.'then
     begin
      Result := MoveDirectory(SearchPath+FSearchRec.Name,NewDir);
      if not Result then Exit;
     end;
    end else
    begin
     FromFileName := SearchPath+FSearchRec.Name;
     ToFileName := NewDir+FSearchRec.Name;
     Result := MoveFile(PChar(FromFileName),PChar(ToFileName));
     if not Result then Exit;
    end;
    Application.ProcessMessages;
    FHandle := FindNext(FSearchRec);
   until  FHandle <> 0;
   Result := RemoveDir(SearchPath);
   if not Result then Exit;
  end;
 finally
  SysUtils.FindClose(FSearchRec);
 end;
end;

{使用例:選択されたディレクトリをD:\Temp\Temp配下に移動します}
procedure TForm1.Button1Click(Sender: TObject);
var
 FDir:string;
 Ret:Boolean;
begin
 FDir := Copy(Application.ExeName,1,3)+'\Temp';
 if SelectDirectory(FDir,[],-1) then
 begin
  Screen.Cursor := crHourGlass;
  try
   Ret := MoveDirectory(FDir,'D:\Temp\Temp');
  finally
   Screen.Cursor := crDefault;
   if Ret then ShowMessage('成功') else ShowMessage('失敗');
  end;
 end;
end;


                                     98/06/08(月) 00:05 十兵衛(BZT01311)

Original document by 十兵衛          氏 ID:(BZT01311)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum