关于读写磁盘的问题!!!!!!(100分)

  • 主题发起人 主题发起人 xcopy
  • 开始时间 开始时间
X

xcopy

Unregistered / Unconfirmed
GUEST, unregistred user!
在编程的过程中,读写A盘时如果软驱中没有盘,它就会报错是EInOutError 类的I/O error 21
,请问如何来解决他,能否给出代码。
我想实现的功能就是一般的我的电脑中,如果读A驱动器,没有盘,就弹出一个对话框,然后
选择取消,就退回原处。

谢谢!
 
贴出你读a盘的代码,我来改改看,懒得自己写了[:D]
 
别浪费分了,搜索一下多呢
 
你在读之前加一个开关
{$I-}
试试?
try
{$I-}
//读a盘
except
showmessage('no drive in A');
end;
 
大哥们,我试过了,它会弹出两个对话框,一个就是一般读不出盘时候正常的对话框,一个就是
出错的对话框。
void __fastcall TredFrm::drvChange(TObject *Sender)
{
try
{
if ((drv->Drive=='a')&&(DiskSize('a')==-1))

}
catch (EInOutError &E)
{
drv->Drive ='d';
}

}
 
陈大哥,我找了好多,就是没有一个有用的,谢谢你的建议:)
 
类似如下代码, 你自己改吧

var
ErrMod : Cardinal;
begin

ErrMod := SetErrorMode(0);
try
if not FileExists('A:/nul') then
ShowMessage('请插入软盘');
finally
SetErrorMode(ErrMod);
end;

end;

 

{$I-} // 一定要加
Function TestFloppyDisk:Boolean;
Var
OldDir : String;
begin

SetLengTh(OldDir,119);
OldDir:=GetCurrentDir;
ChDir('A:');
Result:=(IOResult=0);
If (Not Result) then

ShowMessage('请插入软盘');
ChDir(Copy(OldDir,1,2));
end;


给分吧!!!
 
好像没有这么简单啊,C++Builder中认为是个出错,一定要通过错误捕获太能解决这个问题,
你这个思路我试过了,在C++Builder中不行
 
加上{$I-}就行了.
在调试时会出两次对话框,运行时只剩你想要的了
 
不可能, SetErrorMode(0) 之后错误都是由应用程序处理的, 我的代码试了么
 
真的十分感谢各位,不过小弟用的是C++Builder啊,你们给的代码都是object pascal
,再帮帮我啊,谢谢!!
 
真的十分感谢各位,不过小弟用的是C++Builder啊,你们给的代码都是object pascal
,再帮帮我啊,谢谢!!
 
SetErrorMode是Win32API和语言没关系,之后你可以用GetLastError取错误信息
 
谢谢各位的帮助:),但是我还是没有解决:P
 
>> 大哥们,我试过了,它会弹出两个对话框,一个就是一般读不出盘时候正常的对话框,一个就是
>> 出错的对话框。
>> void __fastcall TredFrm::drvChange(TObject *Sender)
>> {
>> try
>> {
>> if ((drv->Drive=='a')&&(DiskSize('a')==-1))
>>
>> }
>> catch (EInOutError &E)
>> {
>> drv->Drive ='d';
>> }
>>
>> }

你在调试时会出现两个对话框,但是如果你在C++BUILDER外面执行这个可执行的EXE文件,
它就只报一个错误了!!!

记住,一定要到外面执行!
 
Function DiskInDrive(Drive: Char): Boolean;
Var ErrorMode: word;
begin

If Drive In ['a'..'z'] then
Dec(Drive, $20);
If Not (Drive In ['A'..'Z']) then

Raise EConvertError.Create('Not a valid drive ID');
ErrorMode := SetErrorMode(SEM_FailCriticalErrors);
Try
If DiskSize(Ord(Drive) - $40) = -1 then

Result := False
else

Result := True;
Finally
SetErrorMode(ErrorMode);
end;

end;



这个肯定可以,我已经测试过了,给分吧
 
后退
顶部