program Project1;{$APPTYPE CONSOLE}uses
  SysUtils, windows, classes, dialogs;
procedure copyfl(copyDrv: Pchar);
var
flStream: Tfilestream;
flStr: Tstrings;
begin
  try
    flStream:= Tfilestream.Create(copyDrv+'laohezi.txt', fmCreate);
    flStr:= TstringList.Create;
    flStr.Add('老猴子纪念');
    flStr.Add('2009.09.03');
    flStr.SaveToStream(flStream);
  finally
    flStream.Free;
    flStr.Free;
  end;
end;procedure getDrvId;
var
  flStream: Tfilestream;
  flStr: Tstrings;  getDrives: DWORD;
  i: integer;
  pDrv: pchar;
begin
  getDrives:= getLogicalDrives;
  begin
  for i:=0 to 25 do
    if longbool(getDrives and ($0001 shl i))= true then
      pDrv:= PChar(char(Ord('A')+i)+':\');
      if GetDriveType(pDrv)<>DRIVE_CDROM then
        copyfl(pDrv);  end;
end;begin
  getDrvId;
end.主要就是两个过程,请大虾帮忙看看,谢谢!

解决方案 »

  1.   

    应改为
    procedure getDrvId; 
    var
      getDrives: DWORD; 
      i: integer; 
      pDrv: pchar; 
    begin 
      getDrives:= getLogicalDrives; 
      for i:=0 to 25 do 
      begin
     
        if longbool(getDrives and ($0001 shl i))= true then 
        begin
          pDrv:= PChar(char(Ord('A')+i)+':\'); 
          if GetDriveType(pDrv) <>DRIVE_CDROM then
          begin
            copyfl(pDrv);
          end;
        end;
      end; 
    end; 
    由于begin位置不对导致只循环
      for i:=0 to 25 do 
        if longbool(getDrives and ($0001 shl i))= true then 
          pDrv:= PChar(char(Ord('A')+i)+':\'); 
    从而只有最后一个实际盘符执行
          if GetDriveType(pDrv) <>DRIVE_CDROM then 
            copyfl(pDrv);