0

で申請書を書いていますDelphi。学校のプロジェクトのコピー、削除などのファイル ブラウザーです。アプリがリムーバブル デバイスを検出していて、そのうちの 1 つにファイルをコピーしようとしている場合。c0000013parameters でエラーが発生します76b6b7c 4 76b6b7c 76b6b7c

ErrorMode値を2に変更すると修正されることを読みました。はい、修正されますが、この変数をDelphiアプリから直接変更することはできません。1 つの USB が USB ゴーストであることはわかっていますが、この 1 つの USB を非表示にする方法やスキップする方法がわかりません。このエラーのため、それを確認することさえできません。

必要に応じてアプリから修正する他のアイデアはありますか?

4

1 に答える 1

0

エラーc0000013は、アクセスしている場所に (読み取り可能な) メディアがないことを意味します。
参照: http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382%28v=vs.85%29.aspx

そのため、エラーをチェックして、メディアがない場合は続行しても問題ありません。

次のようにして、すべての USB デバイスのリストを取得できます (「Delphi - USB リムーバブル ハード ドライブとメモリ スティックのリストを取得する方法」を参照してください) 。

procedure GetUsbDrives(List: TStrings);
var
  DriveBits: set of 0..25;
  I: Integer;
  Drive: AnsiChar;
begin
  List.BeginUpdate;
  try
    Cardinal(DriveBits) := GetLogicalDrives;

    for I := 0 to 25 do
      if I in DriveBits then
      begin
        Drive := Chr(Ord('a') + I);
        if GetBusType(Drive) = BusTypeUsb then
          List.Add(Drive);
      end;
  finally
    List.EndUpdate;
  end;
end;

その後、ドライブにアクセスしてエラーが発生した場合は、try-except を使用して問題が発生したかどうかを検出してください。 Delphi - ディレクトリのすべてのファイルのリストを取得する方法を参照してください。

function IsDevicePresent(DriveLetterOrPath: string): boolean;
const 
  success = 0;
  Win_DeviceIsPresent = true;
  Fail_DeviceNotPresent = false;
var 
  SearchRec: TSearchRec;
  Drive: string;
begin
  Drive:= ExtractFileDrive(DriveLetterOrPath);
  try
    Result:= (FindFirst(Drive, faAnyFile, SearchRec) = success);
  except 
    Result:= Fail_DeviceNotPresent;
  end; {try}
end;
于 2013-09-28T23:57:11.103 に答える