如何模拟“锁定”文件(具有写锁的文件)

Posted

技术标签:

【中文标题】如何模拟“锁定”文件(具有写锁的文件)【英文标题】:How can I simulate a "locked" file (one which has a write lock) 【发布时间】:2011-08-17 03:52:52 【问题描述】:

我正在尝试调试用户偶尔会尝试打开的锁定文件的问题。该代码似乎具有正确的异常处理,但用户仍然报告看到错误消息。如何模拟锁定的文件以便我自己调试?

编辑:对于 Windows。

【问题讨论】:

他们看到了什么错误信息?当他们收到错误消息时,您确定他们已锁定文件吗? @Ralph,不,我不知道它是否是一个锁定文件,但似乎最有可能。我还认为它可能是通过丢失连接的网络访问的文件。这只是我调试的第一步。 还要检查是否有任何间歇性系统进程在此期间运行,可能会锁定文件夹。 对Superuser 上的同一问题的一些非常有用的答案,包括仅从命令行调用notepad > fileToLock 的答案(尽管它当然会覆盖文件内容,但对于模拟锁很有用)。 【参考方案1】:

试试这个:

( >&2 pause ) >> yourfile.txt

>>追加模式下打开yourfile.txt

参考this

【讨论】:

我真的很喜欢这个。比使用大型 MS 软件锁定我的文件更容易【参考方案2】:

取决于,但以防万一,MS 字锁 如果您想知道您的应用程序是否锁定文件并且它不释放锁定: 只需修改一点你的应用程序(创建一个 testapp)并且永远不要关闭文件(并保持它运行)

【讨论】:

Word 或 Excel 将成为我的建议,所以一个赞成票当之无愧... :) 路易斯,谢谢你的帮助。我会试试这个方法。 :)【参考方案3】:

我使用 Windows API 中的 LockFileEx 函数在 Python 中编写了一个单元测试。这对我来说效果很好(带有锁定目标的shutil.copy() 失败)。

import win32con
import win32file
import pywintypes

p = "yourfile.txt"
f = file(p, "w")
hfile = win32file._get_osfhandle(f.fileno())
flags = win32con.LOCKFILE_EXCLUSIVE_LOCK | win32con.LOCKFILE_FAIL_IMMEDIATELY

win32file.LockFileEx(hfile, flags, 0, 0xffff0000, pywintypes.OVERLAPPED())

见:https://msdn.microsoft.com/en-us/library/windows/desktop/aa365203%28v=vs.85%29.aspx

【讨论】:

【参考方案4】:

我正在使用这个命令提示符

type yourfile.txt | more

yourfile.txt 中插入一个很长的“几页”文本,并希望通过| more 管道来批量插入。 但是文件似乎被锁定了,为什么?

【讨论】:

以上是关于如何模拟“锁定”文件(具有写锁的文件)的主要内容,如果未能解决你的问题,请参考以下文章

Mysql:行锁 表锁 乐观锁 悲观锁 读锁 写锁

MySQL——并发控制(锁)

读写锁(ReentrantReadWriteLock)

高性能MySQL-第一章MySQL架构与历史

读锁跟写锁的区别

锁--02---锁的分类1----读锁(S锁)写锁(X锁)