|
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
|