如何打开一个正在被使用的文件

wzn0521 2017-05-08 11:15:52
delphi7,想打开一个文件,提示这个文件正在被另一个进程使用,无法访问。但此时这个文件可以用记事本打开并看到里面的内容。我用的TStringList的LoadFromFile方法,或者AssignFile方法,都出现错误。

虽然我知道这个文件正在被哪个进程打开,但我并不能强制关闭这个进程(用户需要继续使用)。

那这样问题就来了,记事本是什么原理可以打开查看这个正在被另一个进程使用的文件的呢?Delphi该如何做呢?
...全文
163 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzn0521 2017-05-09
  • 打赏
  • 举报
回复
我就是想以只读方式打开这个文件,能获取到里面内容即可,不会改写。就像记事本一样,能打开看到就行。“通过底层方式读取文件”有什么可参考的资料吗?谢谢楼上的回复!
lyhoo163 2017-05-09
  • 打赏
  • 举报
回复
不能同时打开一个文件,这是操作糸统对文件读写的规范,否则程序同时读写相同文件,会出現错误的。 编辑器能打开一个正被使用的文件,肯定是以只读方式打开的,只是读取了当时的文件内容,因为它不写,不会造成错乱。 如果你非得打开一个正在使用的文件,不能使用正常的文件读写操作方式。你可以通过底层方式读取文件,即读取磁盘上的数据来实现。这要掌握文件的结构。
wzn0521 2017-05-09
  • 打赏
  • 举报
回复
引用 3 楼 DelphiGuy 的回复:
var f: TFileStream; begin f := TFileStream.Create('filename', fmOpenRead + fmShareDenyNone); // ... end;
上午就找到这个方法了,睡了一觉才来看帖子,呵呵! 不过还是谢谢!
wzn0521 2017-05-09
  • 打赏
  • 举报
回复
二楼给出的思路肯定可行,但无奈本人技术水平有限,无法窥视其中奥妙。 想着Delphi不会不考虑到这个问题,经多方查找和验证,终于找到原因了。 TStrings的LoadFromFile方法用的是TFileStream,而其中的Create方法的Mode参数用了fmShareDenyWrite,明显不可以,只好自己创建一个文件流,改用fmShareDenyNone来打开文件,在用TStrings的LoadFromStream从自己创建的文件流中读取内容即可
  • 打赏
  • 举报
回复
var f: TFileStream; begin f := TFileStream.Create('filename', fmOpenRead + fmShareDenyNone); // ... end;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧