我用的是LZCopy函数来实现文件的复制,其中用了这样两个函数AssignFile和Rewrite,相关代码如下:
......
AssignFile(ToFile, ExtractFilePath(paramstr(0))+DateStr+ExtractFilePath('abc\a\')+ExtractFileName('c:\1\1.txt');
......
Rewrite(ToFile);其中ExtractFilePath(paramstr(0))+DateStr+ExtractFilePath('abc\a\')是我想指定的目录,可运行时总是报‘Invalid FileName’错,但是把'abc\a\'中的a\去掉,也就是去掉一级子目录,运行就正常,这是什么原因,难道这个函数不能建立多级目录的文件,如果可以怎样建。另外我再问一下有没有其他的文件复制方法,
多谢!!!

解决方案 »

  1.   

    直接使用API函数CopyFile就可以了,狠简单。
    Invalid FileName是说找不到指定的文件,你可以用
    ShowMessage(ExtractFilePath(paramstr(0))+DateStr+ExtractFilePath('abc\a\'));
    来看一下文件的路径是否正确。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  2.   

    谢谢 lxpbuaa(桂枝香在故国晚秋) 
    我用过showmessage了,没发现什么问题,我再试一下吧另外copyfile具体是怎么用的,请指点,我在帮助里没找到,只有copyfileto
      

  3.   

    {This way uses a File stream.}
    Procedure FileCopy( Const sourcefilename, targetfilename: String );
    Var
      S, T: TFileStream;
    Begin
      S := TFileStream.Create( sourcefilename, fmOpenRead );  try
        T := TFileStream.Create( targetfilename,
                                 fmOpenWrite or fmCreate );
        try
          T.CopyFrom(S, S.Size ) ;
        finally
          T.Free;
        end;
      finally
        S.Free;
      end;
    End;{This way uses memory blocks for read/write.}
    procedure FileCopy(const FromFile, ToFile: string);
     var
      FromF, ToF: file;
      NumRead, NumWritten: Word;
      Buf: array[1..2048] of Char;
    begin
      AssignFile(FromF, FromFile);
      Reset(FromF, 1);  { Record size = 1 }  AssignFile(ToF, ToFile); { Open output file }
      Rewrite(ToF, 1);  { Record size = 1 }
      repeat
        BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
        BlockWrite(ToF, Buf, NumRead, NumWritten);
      until (NumRead = 0) or (NumWritten <> NumRead);
      CloseFile(FromF);
      CloseFile(ToF);
    end;{This one uses LZCopy, which USES LZExpand.}
    procedure CopyFile(FromFileName, ToFileName: string);
    var
      FromFile, ToFile: File;
    begin
      AssignFile(FromFile, FromFileName); { Assign FromFile to FromFileName }  AssignFile(ToFile, ToFileName);     { Assign ToFile to ToFileName }
      Reset(FromFile);                    { Open file for input }
      try
        Rewrite(ToFile);                  { Create file for output }
        try
          { copy the file an if a negative value is returned }
          { raise an exception }
          if LZCopy(TFileRec(FromFile).Handle, TFileRec(ToFile).Handle) < 0
            then
            raise EInOutError.Create('Error using LZCopy')
        finally
          CloseFile(ToFile);  { Close ToFile }    end;
      finally
        CloseFile(FromFile);  { Close FromFile }
      end;
    end;
      

  4.   

    AssignFile(ToFile, ExtractFilePath(paramstr(0))+DateStr+ExtractFilePath('abc\a\')+ExtractFileName('c:\1\1.txt');
    少半个括号吧
      

  5.   

    用ForceDirectories(Path);可以创建多级目录!你可以先用ForceDirectories(Path);后再去Copy文件
      

  6.   

    果然如  Iamfish(呆鱼) 所说是创建多级目录的问题,一切都解决了,谢谢大家