两个程序同时对一个文件分别进行读和写操作,能行吗?

[复制链接]
查看11 | 回复3 | 2021-1-27 06:31:08 | 显示全部楼层 |阅读模式
我现在需要写一个这样功能的程序(程序A):从另一个程序(程序B)生成的log文件中读出文件内容。程序B是一直运行的,log文件的内容也是不断增加的,我写的程序A也要一直监视log文件,只要内容一变化,马上就要从文件中读取内容。
我现在担心的是出现log文件只能被一个程序使用,另一个程序打开文件时会失败,被提示文件被占用;
还有个问题就是(在文件能同时被两个程序打开的前提下)我的程序A怎么知道log文件的内容变化了,是否需要先关闭文件再打开啊?还是直接读取文件就能读出更新后的内容?
注意是两个不同的程序,不是两个线程。
急需解决,请高手指教
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:31:08 | 显示全部楼层
多个进程或多个文件流实例可以同时访问同一文件,但必须都是读,只要有写(即独占)就不能同时进行,因此你的这种需求在不改变设计的情况下是不行的。
改变一下设计,一切变得简单起来。
1、A与B可以通过WCF或套字节进行通信,A不直接操作文件。
2、每当B操作日志时,就通知A,并将最的操作日志信息直接发送给A。
3、这样A就实时得到B的最新消息,具解决了你的问题,还可以跨网络、跨机器操作。
回复

使用道具 举报

千问 | 2021-1-27 06:31:08 | 显示全部楼层
“我的程序A怎么知道log文件的内容变化了”
我觉得可以用FileSystemWatcher
参考(里面有例子):
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
回复

使用道具 举报

千问 | 2021-1-27 06:31:08 | 显示全部楼层
监控程序,打开文件是用FileShare.ReadWrite试一试

using(varstream=newFileStream(
@"d:\myfile.xls",
FileMode.Open,
FileAccess.Read,
FileShare.ReadWrite))
{
}

参考:
HowdoIopenafilethatisopenedinanotherapplication
http://stackoverflow.com/questions/1048225/how-do-i-open-a-file-that-is-opened-in-another-application
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行