【发布时间】:2012-07-25 15:00:08
【问题描述】:
我对放置在 LAN 中的文件有一些问题:有一个 Delphi 程序(服务器)应该写入一些文件,这些文件只能由多个 Deplhi 程序(客户端)读取。 我在服务器中使用这些简单的指令进行编写(DataList 是一个 TStrings):
Stream:=TFileStream.Create(filePath,fmOpenWrite or fmShareDenyWrite);
try
DataList.SaveToStream(Stream);
finally
Stream.Free;
end;
客户端每 5 秒检查一次上述文件是否被修改(仅检查 FileAge),如果发生修改,它们会通过以下方式加载 DataList:
try
Stream:=TFileStream.Create(filePath,fmOpenRead or fmShareDenyNone);
DataList.LoadFromStream(Stream);
finally
Stream.Free;
end;
通常一切正常,但有时会发生服务器或客户端引发异常,因为“文件正在被其他进程使用”。 我不明白问题出在哪里:我尝试了很多替代方案,但这也可能发生在服务器和客户端运行的一个 istance..
有什么想法吗?
谢谢!
【问题讨论】:
-
尝试找出锁定文件的进程。这可能是另一个过程,例如防病毒、备份、索引服务。
-
我不这么认为:写入文件的计算机运行 Windows 2008 Server,但它没有任何防病毒软件,并且备份在夜间工作。而且,最重要的是,如果我单独运行服务器或客户端程序,我没有任何问题,而如果我同时运行两者,我总是会发生冲突..
-
我遇到了完全相同的问题。在服务器中,这可能是因为两个服务器实例尝试同时写入。在客户端中,我不知道,我只是小心翼翼地捕捉并优雅地忽略异常,并在代码中用强硬的注释说 它永远不应该发生,但它确实发生了
-
不要让客户端直接访问服务器上的文件。通过网络服务器公开文件怎么样?