ホーム >プログラム >Delphi 6 ローテクTips

Unicode対応DeleteFile

Unicode対応DeleteFile。

interface

function DeleteFileW(sFile: WideString): Boolean;
function gfnbFileDelete(sFile: WideString): Boolean;


implementation
uses
  Windows;


function DeleteFileW(sFile: WideString): Boolean;
//Unicode対応DeleteFile。
begin
  Result := Windows.DeleteFileW(PWideChar(sFile));
end;

ワイルドカード対応版。

function gfnsFilePathGet(sFile: WideString): WideString;
//Unicode対応ExtractFilePath。
var
  i: Integer;
begin
  Result := '';
  if (sFile <> '') then begin
    for i := Length(sFile) downto 1 do begin
      if (sFile[i] = '\') or (sFile[i] = '/') then begin
        Result := Copy(sFile, 1, i);
        Break;
      end else if (sFile[i] = ':') then begin
        Result := Copy(sFile, 1, i) + '\';
        Break;
      end;
    end;
  end;
end;

function gfnbFileDelete(sFile: WideString): Boolean;
{
Unicode対応DeleteFile。
ワイルドカード対応。
sFileにマッチするすべてのファイルを削除し、すべて正常に削除できたらTrueを返す。
}

var
  lh_Handle: THandle;
  lr_Info:   TWin32FindDataW;
  ls_Path:   WideString;
begin
  Result := False;

  FillChar(lr_Info, SizeOf(TWin32FindDataW), 0);
  lh_Handle:= FindFirstFileW(PWideChar(sFile), lr_Info);
  try
    if (lh_Handle <> INVALID_HANDLE_VALUE) then begin
      ls_Path := gfnsFilePathGet(sFile);
      Result  := True;
      repeat
        if ((lr_Info.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0) then begin
          Result := DeleteFileW(PWideChar(ls_Path + WideString(lr_Info.cFileName))) and Result;
        end;
      until not(FindNextFileW(lh_Handle, lr_Info));
    end;
  finally
    Windows.FindClose(lh_Handle);
  end;
end;

ファイルはゴミ箱へ送られるのではなく単に削除されます。