我是在一个文件夹下取所有文件进行处理,以下是代码,其中有一个文件执行到move一句时报Access violation at address 00450251 in module 'procedurenew.exe'.Reak of address 00215FFC错误,其他的文件都是正常的。不知道是怎么回事?哪位能帮忙分析一下吗?
move函数对源地址和目标地址的数据不是透明的吗?怎么会其中一个文件不行呢,这样不是就和数据有关吗? 
    tf :=TFileStream.Create(RealFileName,fmOpenRead);
    tf.Position :=0;
    iFileLength :=tf.Size;
    Setlength(filebody,iFileLength);
    tf.Read(filebody[0],iFileLength);
    tf.Free;
    setlength(arrFullData,ceil((iFileLength+1)/512)*512);
    move(filebody,arrFullData[0],iFileLength);
    for i :=iFileLength to length(arrFullData)-1 do
      arrFullData[i] :=$0;

解决方案 »

  1.   

    Move(filebody[0], arrFullData[0], iFileLength);
    修改成这样测试看看
      

  2.   

    改成Move(filebody[0], arrFullData[0], iFileLength);就可以了,但为什么呢
    为什么其他文件又不出错呢,就一个文件会出错。
    zswang,能说说吗
      

  3.   

    filebody起始位置不是filebody[0]
    因为还要存储下标信息
      

  4.   

    那如果move函数要把字符串、数字移到byte数组中要这么移呢,这样行吗?
    var
    newnum :integer;
    newstr :string;newnum :=345;
    newstr  :='sdfd';
    move(newnum,fileindex[0],4);
    move(PChar(newstr)^,fileindex[4],length(nwestr));