我们有一个如下要求,用于处理C#代码中的XML文件。 请以这种方式提供逻辑/解决方案。
问题:
我们有一个XML文件,假设它有test.xml
。
当用户'A'使用test.xml时,我们需要锁定此XML并处理类似读/写等的要求。
同时用户'B'也试图访问test.xml,我们要求用户'B'不能打开,'B'必须等到用户'A'的锁定要释放或解锁。
此外,在用户“B”处于等待模式并且我们不想向用户显示任何消息之前,我们不应该收到任何错误/异常。 由于性能问题,我们对此方案中的FileStreams不感兴趣。
在这方面,任何人都可以帮助解决这类问题。
请注意: 我们不想使用文件流。 请在这方面提出替代解决方案。
答案 0 :(得分:4)
我熟悉的技术是创建锁定文件作为您锁定的文件的兄弟。如果所有客户端都需要对相关文件具有读/写权限,则必须创建此锁定文件,如果文件未创建锁定文件,则无法读取/写入文件。当他们完成读/写操作时,他们会关闭对文件的访问并删除锁定文件。然后,等待写入的客户端应该轮询锁定文件的存在,当它不存在时,它们会创建它并自由使用该文件。
答案 1 :(得分:0)
我想你必须以READ / WRITE模式打开文件并进行某种循环来检查文件是否未打开。
try {
FileStream fileStream = new FileStream(@"c:\file.txt", FileMode.Open, FileAccess.Write);
} catch(Exception e){
// TODO check if access denied
}
如果您希望在我建议您查看信号量之前进行这些测试。
答案 2 :(得分:0)
为什么不在这种情况下使用 Mutexes - 如果一个用户打开并处理该文件,您希望限制其他用户对该文件的访问。