如何像记事本程序一样打开一个已经被其他程序打开的文本文件。并读取其内容?
先放50分,解决了再加分。总分:100-200下面这种方法不行,请不要再贴
  AssignFile(F, FileName);
  FileMode := 0;  {Set file access to read only }
  Rewrite(F);//reset(F)也不行!
  readln(F,str)
TStringList.LoadFromFile 这样也不行:
  hFile := CreateFile(PChar(FileName), GENERIC_READ,
                      FILE_SHARE_READ, nil, OPEN_EXISTING,
                      FILE_FLAG_SEQUENTIAL_SCAN, 0); 
I/O Error 32 错误用内存流:
mem :TMemoryStream;
Mem.LoadFromFile(FileName);
最终也是调用下面这个api:
CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE,
    0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)  

解决方案 »

  1.   

    我不知道其他程序有没有共享读那个打开的文本文件,但那个程序运行的同时,记事本却可以打开那个文本文件。导出记事本程序调用的api发现记事本是调用createfilew不知这个api与createfile有什么不同?Memo1.LoadFromFile不行。
      

  2.   

    MSDN中查不到 是微软特殊处理了
      

  3.   

    试试TFileStream:
    Stream := TFileStream.Create(FileName, fmOpenRead+fmShareCompat)只要那个文件不是独占方式打开的.里面的共享方式一个个试。总有一个应该可以。
      

  4.   

    "我不知道其他程序有没有共享读那个打开的文本文件,但那个程序运行的同时,记事本却可以打开那个文本文件。导出记事本程序调用的api发现记事本是调用createfilew不知这个api与createfile有什么不同?"-------------------------------------------------------记事本可能是用CreateFile以路径名为"\\.\X:"的形式来进行绝对磁盘读写的了?
    乱猜的,详细想了一下,又不大可能.记事没这么高级吧...  -_-