我有一个被多人使用的文档,我们必须不断检查该文件是否正在使用以及由谁使用。
我想知道 R 中是否有任何方法可以获取 .xlsx 文件的状态,例如它是关闭还是打开,以及谁打开了该文件。
然后我会将此结果推送到一个会定期刷新的 HTML 页面,这样就无需手动检查了。
最佳答案
这是您可能会考虑的起点。此选项使用 C 代码,您可以使用 R Cmd 进行编译并从 R 调用。
在文件“islocked.c”中粘贴以下内容:
#include <stdio.h>
#include <share.h>
void testLock(int *locked, char **filename)
{
FILE *stream;
if( (stream = _fsopen( *filename, "wt", _SH_DENYWR )) != NULL ) {
fclose( stream );
*locked = 0;
} else {
*locked = 1;
}
}
打开命令提示符(windows | find | 'cmd')
更改为您保存上面文件的文件夹
在命令提示符 c:\中键入以下内容
"Program File\R\R-3.1.2\bin\r"CMD SHLIB islocked.c
它不应引发任何错误或警告并因此创建 .o 和 .dll 文件。
现在使用 R:
dyn.load('c:\pathtothe_c_file\islocked.dll')
结果->.C('testLock', islocked=as.integer(0), filename="d:\tools\r\test.dll")
结果$被锁定
[1] 1
DLL 被 R 锁定,因此应该返回 1。尝试 .o 文件,它应该返回 0。Windows 7 和更高版本中有一个名为 IFileInUse 的 API,它可能会返回进程,也可能返回拥有该文件的用户打开,如果您需要更多信息,您可以查看。
IsFileInUse API: http://msdn.microsoft.com/en-us/library/windows/desktop/ee330722%28v=vs.85%29.aspx
来自 Microsoft 的在命令行上运行的实用程序,如果您能够在服务器上安装工具,您可以通过 R 进行 shell 操作,它可能会生成您需要的内容: http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx
关于R - 检查文件是否打开/关闭以及由哪个用户打开/关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27779443/