首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用锁文件限制c#程序的并发用户数

问使用锁文件限制c#程序的并发用户数
EN

Stack Overflow用户
提问于 2020-12-08 16:50:09
回答 1查看 76关注 0票数 2

我已经制作了一个C#程序,出于授权的原因,我想限制并发用户的数量。

程序本身(exe文件)是本地安装的,数据文件(不是数据库)存储在服务器上的共享驱动器上。

我的想法是有一个锁文件,程序的每个实例都保留一个ReadWrite句柄。

然后我会把打开的文件句柄数到锁文件。当句柄数达到5个时,我会拒绝更多的句柄,并且不允许程序启动,

类似于:

代码语言:javascript
复制
FileStream fileStream = new FileStream(@"f:\blabla\lock.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite);

if (filestream.CountFileHandles()>5) return false; 

但我不知道怎么算锁文件的打开文件句柄。

我不想在锁文件里写任何东西。数一下手柄。

或者我走错了路,有人可以引导我找到一个更好的解决方案,如何限制并发用户的数量。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-08 17:22:34

它很脏,但这可能只是起作用.

您预先准备了尽可能多的锁文件,就像允许并发用户一样。因此,如果您允许10个用户,那么它将是:

f:\blabla\lock0.txt,f:\blabla\lock1.txt,.,f:\blabla\lock9.txt

要获得“许可证”,程序将遍历所有文件,尝试以独占模式()读取每个文件:

代码语言:javascript
复制
File.open(f, FileMode.Open, FileAccess.ReadWrite, FileShare.None)

继续尝试0..9,直到对其中一个文件成功(在这种情况下,您现在拥有了许可证),或者您尝试了所有这些文件(在这种情况下,您没有得到一个)。

无论何时退出程序,都要尽可能干净地关闭文件,使其工作得更好。

最终,总是有问题的家庭滚动许可证解决方案。如果它不仅仅是少数并发用户,那么某种服务器解决方案会更好,可能是您没有自己编写的解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65203249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档