fileName是文件的全路径名,如果该路径比较长,调用就失败
但是用 
       MStream := TmemoryStream.Create;
       MStream.LoadFromFile(FileName); 
运行正确。

解决方案 »

  1.   


    跟踪了一下发现,流调用的函数是api的 CreateFile.CreateFile在msdn中规定长度不能大于 MAX_PATH = 260; 个字符。
    如果超过这个字符就必须用 CreateFileW 函数,
    所以很简单只用把delphi的源文件改一下就可以了,delphi就是这点好,随便改.单元 sysUtils 中function FileCreate(const FileName: string): Integer;
    {$IFDEF MSWINDOWS}
    begin
      Result := Integer(CreateFileW(PChar(FileName), GENERIC_READ or GENERIC_WRITE,
        0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0));
    end;
    {$ENDIF}
    {$IFDEF LINUX}
    begin
      Result := FileCreate(FileName, FileAccessRights);
    end;
    {$ENDIF}
      

  2.   

    不好意思,昨天没有测试,今天测试了一下发现要将调用过程中的所有string改为widestring才能成功,否则报错。
    另外,发现一个怪事,我想建立一个路径长度超过255个字符的路径,可是在路径达到255个字符后,windows居然不让我新建文件夹了,不知道搂主的路径怎么建出来的。
      

  3.   

    我的路径并没有超过256个字符,TfileStream报错,而TmemoryStream正确
      

  4.   

    GetShortPathName(pchar(ls_dir),pchar(ls_path),255);
      

  5.   

    改称如下语句就不会出错了:FStream := TfileStream.Create(fileName,fmOpenReadWrite Or fmShareDenyWrite),