错误DiskSize Delphi

时间:2014-12-18 20:25:41

标签: delphi delphi-xe6

我有一个功能可以检查驱动器(CD / DVD,USB密钥,软盘是否正常)......

它工作得很完美......如果它小于0 ......它返回没有连接驱动器......

最大的问题是,我移除了我的pendrive,没有弹出;;;我拉了pendrive ...因此DiskSize函数返回以下错误:

  

驱动器中有磁盘。请将磁盘插入驱动器设备

如何修复此错误...因为该功能正常工作...只是DiskSize产生了这个错误,事实上我是puzado没有弹出的棒......

// Check if drive is OK
function DriveOK (Drive: Char): boolean;
var
I: byte;
space: integer;
begin
   Drive: = upcase (Drive);
   not if (Drive in ['A' .. 'Z']) then Begin
     raise Exception.Create ('incorrect Unit');
   end;

   I: = Ord (Drive) - 64;
   if (DiskSize(I) >= 0) then Begin
      Result: = false;
   End Else Begin
      Result: = true;
   end;
end;

我的系统是Windows 7 64位...我发现,自删除打印机内存卡后产生错误...但问题是这张卡康柏哈网络...当我删除网络共享...它不会产生错误......

screenshot

2 个答案:

答案 0 :(得分:3)

您需要关闭Windows'内部错误报告以禁用弹出错误对话框:

function DriveOK(Drive: Char): Boolean;
var
  I: byte;
  mode: UINT;
begin
  Drive := UpCase(Drive);
  if not (Drive in ['A' .. 'Z']) then begin
    raise Exception.Create('incorrect Unit');
  end;

  I := Ord(Drive) - 64;

  mode := SetErrorMode(SEM_FAILCRITICALERRORS);
  mode := SetErrorMode(mode or SEM_FAILCRITICALERRORS);
  try
    if (DiskSize(I) >= 0) then begin
      Result := False;
    end else begin
      Result := True;
    end;
  finally
    SetErrorMode(mode);
  end;
end;

可替换地:

function DriveOK(Drive: Char): Boolean;
var
  I: byte;
  mode: DWORD;
begin
  Drive := UpCase(Drive);
  if not (Drive in ['A' .. 'Z']) then begin
    raise Exception.Create ('incorrect Unit');
  end;

  I := Ord(Drive) - 64;

  SetThreadErrorMode(GetThreadErrorMode() or SEM_FAILCRITICALERRORS, @mode);
  try
    if (DiskSize(I) >= 0) then begin
      Result := False;
    end else begin
      Result := True;
    end;
  finally
    SetThreadErrorMode(mode, nil);
  end;
end;

答案 1 :(得分:-1)

嘿朋友之所以发生这种情况是因为Windows 7会在插入的任何pendrive中存储一些缓存文件,当你将其拉出而不弹出这些文件时会被错误处理并导致很多问题。您可以通过在Windows操作系统中禁用pendrive上的“缓存文件存储”来避免这种情况。因为它是一个相当复杂和漫长的过程,我提供了一个链接,你可以用它来进一步避免这些问题  http://www.rybersoft.com/2016/05/how-to-disable-write-caching-by-windows.html