为什么这个复制文件函数在复制硬盘上的文件没问题,而复制光盘的文件就出现了任何文件夹(包括其中的文件)都不会被复制? 仅仅复制文件。
------------
函数如下:(功能:把源目录下所有文件及子目录 复制到目标目录)
function DoCopyDir(sDirName:String;sToDirName:String):Boolean;
var
  F: TSearchRec;
  t,tfile:String;
  sCurDir:String[255];
  FindFileData:WIN32_FIND_DATA;
begin
  sCurDir:=GetCurrentDir;
  ChDir(sDirName);
  F.FindHandle:=FindFirstFile('*.*',FindFileData);
  if F.FindHandle<>INVALID_HANDLE_VALUE then begin
      if not DirectoryExists(sToDirName) then    {如果目录不存在}
         ForceDirectories(sToDirName);     {强迫建立目录}
      repeat
        tfile:=FindFileData.cFileName;
        if (tfile='.') or (tfile='..') then
           Continue;                {跳过两个目录标识}
           if FindFileData.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY then begin
              t:=sToDirName+'\'+tfile;
              if not DirectoryExists(t) then
                 ForceDirectories(t);
              if sDirName[Length(sDirName)]<>'\' then
                 DoCopyDir(sDirName+'\'+tfile,t)
              else
                 DoCopyDir(sDirName+tfile,sToDirName+tfile);
           end
           else begin   {Copy Files under directories}
              t:=sToDirName+'\'+tFile;
              {show a message of copying}
              {may be set a Golbal variant to VirDir}
              Form_Installing.ToFile.Caption := '';
              Form_Installing.ToFile.Repaint;
              Form_Installing.ToFile.Caption:= t;
              Form_Installing.ToFile.Repaint;
              CopyFile(PChar(tfile),PChar(t),false);
              Form_Installing.ProgressBar1.StepBy(1);    {Show The ProgressBar status ;}
           end;
      until FindNextFile(F.FindHandle,FindFileData)=false;
          FindClose(F);
  end
  else begin
    ChDir(sCurDir);
    result:=false;
    exit;
  end;
  ChDir(sCurDir); {回到原来的目录下}
  result:=true;
end;

解决方案 »

  1.   

    FindFileData.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY
    判断不出来光盘的目录 因为它只读所以FILE_ATTRIBUTE_DIRECTORY+FILE_SHARE_READ
      

  2.   

    btw 确实不好理解的代码begin干嘛老写后面,C++带来的习惯?
      

  3.   

    to: kaguo(▲) Guozhi(★★★★★) 
    ---
    非常谢谢您的帮忙!我应该怎样修改才可以呢?
      

  4.   

    握有拷贝的代码,给你
     [email protected]
      

  5.   

    可以靠光盘的内容,握有两个光驱一个dvd一个刻录机,都行
      

  6.   

    to:  yq3woaini(哈哈镜(初级代码工)(★★★))
        哇!太谢谢你啦~~
    -----------
    [email protected]
      

  7.   

    这个问题还没解决啊!
    FILE_ATTRIBUTE_DIRECTORY  与只读属性有什么关系吗?
    一个DIRECTORY不管你是不是只读,它都会是个DIRECTORY的!
    -------
    真的有点莫名其妙呢
    ---------------
    高手帮忙阿
      

  8.   

    这样地,属性是按位算的
    你用if (FindFileData.dwFileAttributes and 16)=FILE_ATTRIBUTE_DIRECTORY then
      

  9.   

    if (FindFileData.dwFileAttributes and 16)=FILE_ATTRIBUTE_DIRECTORY then
    替换
    if FindFileData.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY then
    就可以了
      

  10.   

    to: kaguo(▲) Guozhi(★★★★★) 
    --------------------------------
    您的热心我很感谢!应该您的答案可以解决我的问题,(等会去刻个光盘试试)--------------
    非常谢谢,(很快就结帐的:)  !)
      

  11.   


     回复人: smartcreater01(她们的胸部疲劳了我的双眼) 
     ...
    ------------------寒一下这位朋友的昵称 -_-@@