Delphi - 在共享环境中写入/读取文件

时间:2012-07-25 15:00:08

标签: delphi file process share

我对放在LAN中的文件有一些问题:有一个Delphi程序(服务器)应该写一些文件,只能由多个Deplhi程序(客户端)读取。 我在服务器中使用这些简单的指令进行写入(DataList是一个TStrings):

Stream:=TFileStream.Create(filePath,fmOpenWrite or fmShareDenyWrite);
try
 DataList.SaveToStream(Stream);
finally
 Stream.Free;
end;

如果上面的文件被修改(仅通过检查FileAge),客户端每5秒检查一次,如果发生了修改,它们将按以下方式加载DataList:

try
 Stream:=TFileStream.Create(filePath,fmOpenRead or fmShareDenyNone);
 DataList.LoadFromStream(Stream);
finally
 Stream.Free;
end;

通常一切都运行良好,但有时会发生服务器或客户端引发异常,因为“该文件正被其他进程使用”。 我不明白哪个是问题:我尝试了很多替代方案,但这也可能只发生在服务器上,只有一个客户端正在运行..

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

按照设计,网络文件系统不可信任。至少,NFS(在Linux中)和SMB(在Windows中)没有经过验证的锁定功能:并发访问不安全。

您需要使用客户端 - 服务器协议来确保共享数据是安全的。您可以使用TCP / IP,HTTP或任何其他方式。

我建议使用真正的服务实现,如DataSnap,RemObjects或我们的Open Source mORMot