Skip to main content
 首页 » 编程设计

c#之如何在多用户文件管理系统中锁定文件

2024年02月23日30lhb25

我有一个程序(为每个用户的计算机部署了一个副本)供用户将文件压缩(CAB 文件)存储在中央文件服务器上。

添加文件时,用户需要将文件解压到自己的磁盘上,添加文件,然后压缩回服务器。因此,如果两个用户同时处理同一个压缩文件,则较晚上传的文件会取代较早上传的文件,造成数据丢失。

我的策略是在用户提取压缩文件之前,程序会检查服务器上是否存在指定的临时文件。如果没有,程序将创建这样的临时文件以防止其他用户的干扰,并在上传后删除该临时文件;如果是,程序将等待直到临时文件被删除。

有更好的方法吗?频繁创建和删除空文件会损坏磁盘吗?

请您参考如下方法:

And will frequently creating and deleting empty files damage the disk?

没有。如果您使用的是固态磁盘,则可以执行的写入次数存在理论上的限制(这是 FLASH 的继承限制)。但是,您极不可能达到该限制。

Is there better way of doing this

好吧,我会用不同的方式来解决这个问题:

编写一个处理所有磁盘访问的 Windows 服务,并让您的客户端应用程序与该服务对话。因此,当客户端需要检索文件时,它会打开到您的服务的套接字连接并请求文件并将其保存在内存中或将其保存到本地磁盘。对客户端的本地文件副本执行任何修改(解压缩、添加/删除/更新文件、重新压缩等),并且当操作完成并且您准备好保存(或使用源代码控制术语提交)您的更改,打开另一个套接字连接到您的服务应用程序(在服务器上运行),并将新文件内容作为二进制流发送给它。

然后,服务应用程序将处理文件的加载和保存到磁盘。这也为您提供了许多额外的功能 - 服务器可以跟踪过去的版本(甚至可能将每个版本提交给 svn 或其他源代码控制系统),提供元数据,例如最新版本是什么,等等。

既然我正在考虑,您最好将 svn 接口(interface)集成到您的应用程序中。 SharpSVN is a good library for this.