微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是Windows XP中的文件创buildprimefaces?

嗨,我想在两个进程之间使用文件系统作为锁,在Windows XP。 即给定一个文件名“file_lock”,一个进程通过尝试创build文件“file_lock”(如果它不存在的话)来获取锁。 如果已经存在,则无法获得locking。

FileStream fs=new FileStream("c:\file_lock,FileMode.CreateNew);

这会工作吗? 如果文件不存在primefaces文件文件创build?

谢谢!

CreateFileMapping,MapViewOfFile,如何避免阻塞系统内存

提取Windows文件属性自定义属性)C#

“侦听”C / C ++中的文件更改(在Windows上)

使用Java打开文件属性窗口

文件deleteOnExit()函数保持参考指针打开,即使文件删除

C – 读取文件和分段错误

复制文件安全权限

将包含stringtypes成员的logging保存到文件(Delphi,Windows)

删除正在使用的文件在运行时

文件在多个进程上

是的,它会工作。 但是,由于多种原因, 互斥量不如以下几种 :

如果用户无权创建该文件,该怎么办?

当你的应用程序崩溃,系统清理互斥锁。 它不会为你删除你的文件

为什么不必要地引入磁盘IO的开销和风险? (我不确定这是否可能,但是当文件打开时,用户可以重命名或移动它,对吧?)

这是更多的代码

由于该问题已被标记为C#,这个答案不再适用,但我想离开它,以防将来对其他人有所帮助。

如果您使用Java,则可以使用java.nio.channels.FileLock 。

要使用它,请执行以下操作:

import java.io.RandomAccessFile; import java.nio.FileLock; ... RandomAccessFile raf = new RandomAccessFile(file,"rw"); FileLock lock = raf.getChannel().tryLock(0L,Long.MAX_VALUE,false); if (lock != null && lock.isValid()) { // You've acquired the lock! else { // You did not acquire the lock raf.close(); }

注意:这样可以防止来自其他进程的访问,而不是其他线程。 你需要使用自己的内部同步(锁定raf可能会工作)。

如果你想使用该文件作为同步锁,我建议你下一个过程。

检查文件锁定/存在

如果文件被锁定,另一个进程正在工作

如果文件不存在或没有锁定,您可以查询

打开获取锁的文件

这段代码可以帮助你检查锁。

public static bool isFileLocked(string filename) { if (!File.Exists(filename)) throw new FileNotFoundException("File not found!",filename); FileStream fs = null; try { fs = File.Open(filename,FileMode.Open,FileAccess.ReadWrite,FileShare.None); return false; } catch (IOException) { return true; } catch (Exception) { throw; } finally { if (fs != null) { fs.Close(); fs = null; } } }

HTH!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐