但是shfileoperation函数只能在NT下使用啊。有没有更好的方法?

解决方案 »

  1.   

      if FindFirst(FromFile, faAnyfile,SearchRec) = 0 then
      begin
        GetMem(FromDir, Length(FromFile)+2);
        try
          GetMem(ToDir, Length(ToFile)+2);
          try
            FillChar(FromDir^, Length(FromFile)+2, 0);
            FillChar(ToDir^, Length(ToFile)+2, 0);        StrCopy(FromDir, PChar(FromFile));
            StrCopy(ToDir, PChar(ToFile));        with SHFileOpStruct do
            begin
              Wnd    := Handle;   // Assign the window handle
              wFunc  := FO_COPY;  // Specify a file copy
              pFrom  := FromDir;
              pTo    := ToDir;
              fFlags := 0;
              fAnyOperationsAborted := true;
              hNameMappings := nil;
              lpszProgressTitle := nil;
              if SHFileOperation(SHFileOpStruct) <> 0 then
                RaiseLastWin32Error;
            end;
          finally
            FreeMem(ToDir, Length(ToFile)+2);
          end;
        finally
          FreeMem(FromDir, Length(FromFile)+2);
        end;
      end
      

  2.   

    shfileoperation可以98下面用的,我已经给了例子了
      

  3.   

    TO cobi(小新国际)兄:
    shfileoperation可以在98下面用吗?但我查了win32 api手册,似乎说只能在NT下用。是delphi自带的手册。
    另外,上一例中的FromFile,ToFile的初始值是什么?一定要指定文件名吗?
    能不能给出所有变量的声明及初始值。
    谢谢了,解决这两个问题之后再加分。
      

  4.   

    以上代码是我的一个程序里用到的,该程序是在98下运行,没有问题。
    FromFile和ToFile都是String类型,记录被复制文件的源位置和目标位置。
    其他的变量的声明如下:
    SearchRec : TSearchRec;
    SHFileOpStruct: TSHFileOpStruct;
    FromDir: PChar;
    ToDir: PChar我这个程序里是拷贝一个文件的,如果要拷贝整个目录,则不要写前面的findfirst判断语句,另外FromFile,ToFile直接写目录名即可。
      

  5.   

    非常感谢cobi(小新国际)兄,可以解贴了,谢谢。
      

  6.   

    cobi(小新国际)兄:
    我照你所说的做了,但系统提示SHFileOpStruct为非法变量,请问是否需要uses其它单元?
    另外,我的源目录及目标目录是用string变量表示的,如何实现与PChar变量的互换?
      

  7.   

    在interface的uses中加上shellapi和filectrl