有一个文本文件,正在被其他程序写入。  由于想读取文本文件内容。
      用              ls:=tstringlist.create;
                    ls.loadfromfile('1.TXT'); 或者 AssignFile(F,'1.TXT');
    均提示次文件被其他程序占用,后者还报I/O错误。 我指向读取里面的内容,并不是改写,请问如何才能读取里面的内容啊。

解决方案 »

  1.   

    用TFileStream打开,可打开其他程序占用的文件。打开方式为:fmOpenRead or fmShareDenyNone
      

  2.   


    var
      stream:TFileStream;
      ls:TStringList;
    begin
      ls:=tstringlist.create; 
      stream := TFileStream.Create('',fmOpenRead);
      ls.LoadFromStream(stream);
    end;
      

  3.   

    如果是独占方式打开就没办法了否则可以用只读方式打开fmOpenRead or fmShareDenyNone
      

  4.   

    谢谢各位 ,用 fmShareDenyNone可以了。
      

  5.   

    说一个思路
    如果 1.txt 正在打开
    取这个窗口的句柄,一般是 '1.txt - 记事本'
    然后取edit控件的内容,因为1.txt是在记事本软件的edit控件里显示的// 以下是查找窗口 Edit 的代码:
    function MyFindWindow : THandle;
    const
      // 父窗口类名数组
      A_szClassName : array [0..1] of PChar = (
        'Notepad',
        'Edit'
      );
      // 父窗口标题数组
      A_szWinName : array [0..1] of PChar = (
        '1.txt - 记事本',
        ''
      );
    var
      i : Integer;
      hLastWin : THandle;
    begin
      // 首先求得顶级父窗口
      hLastWin := FindWindow(A_szClassName[0], A_szWinName[0]);
      // 逐次用FindWindowEx函数求出各级子窗口
      for i:=1 to 1 do
      begin
        hLastWin := FindWindowEx(hLastWin, THandle(nil),
                A_szClassName[i], A_szWinName[i]);
      end;
      result := hLastWin;
    end;
    // 举例: hLastWin : THandle;
    //       hLastWin := MyFindWindow();