我有一个功能可以检查驱动器(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位...我发现,自删除打印机内存卡后产生错误...但问题是这张卡康柏哈网络...当我删除网络共享...它不会产生错误......
答案 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