お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





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

"複数ファイルの操作"





SHFileOperation APIを使ったファイル操作を過去ログを参考にさせて頂き、
自分に使いやすい形で関数ユニットにしました。

書式  ShFileOp(FromFileList, ToPath, aFunc);

引数  FromFileList :操作対象のファイル名を保持する文字列リスト
   ToPath       :ファイルを送る先のディレクトリ(ファイル)パス
      aFunc        :操作の種類を指定する定数
              FoCopy   コピー
              FoDelete  削除
              FoMove    移動
                          FoRename  改名
戻値 操作が成功したら0、失敗したら0以外の整数を返す。


//------------ 関数ユニット ここから ----------

unit Unit1;

interface

uses
  Classes, ShellAPI;

const
  FoCopy   = FO_COPY;
  FoDelete = FO_DELETE;
  FoMove   = FO_MOVE;
  FoRename = FO_RENAME;

function ShFileOp(FromFileList: TStrings; ToPath: string; aFunc: Word): Integer;implementation

function ShFileOp(FromFileList: TStrings; ToPath: string; aFunc: Word): Integer;var
  SHFileOpStruct: TSHFileOpStruct;
  i: Integer;
  FListStr: string;
begin
  Result:= -1;
  if FromFileList.Count = 0 then Exit;
  FListStr:= '';
  for i:= 0 to FromFileList.Count - 1 do
    FListStr:= FListStr + FromFileList[i] + #0;
  with SHFileOpStruct do
  begin
    Wnd := 0;
    wFunc := aFunc;
    pFrom := PChar(FListStr);
    pTo   := PChar(ToPath);
    fFlags := FOF_ALLOWUNDO;
    hNameMappings := nil;
    lpszProgressTitle:= nil;
  end;
  Result:= SHFileOperation(SHFileOpStruct);  // APIを呼び出す。
end;

end.

//--------- 関数ユニット  ここまで --------------

以下の例は、ファイルリストボックスで複数選択したファイルをディレクトリ
リストボックスで指定したフォルダーへコピーします。

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  Files: TStrings;
begin
  if FileListBox1.SelCount < 1 then Exit;
  Files:= TStringList.Create;
  try
    for i:= 0 to FileListBox1.Items.Count - 1 do
      if FileListBox1.Selected[i] then
        Files.Add(FileListBox1.Directory + '\' + FileListBox1.Items[i]);
    if ShFileOp(Files, DirectoryListBox2.Directory, FoCopy) = 0 then
      ShowMessage('ファイルをコピーしました。') else
      ShowMessage('コピーできません。');
  finally
    Files.Free;
  end;
end;


      ★ AvalonU使うならログブラウザ「えるつぅ」公開中 ★
      AvalonないとNIFTYできない(^^) H-Triton Since 1996

Original document by H-Triton        氏 ID:(QZV11422)


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

Copyright 1996-2002 Delphi Users' Forum