R – 检查文件是否打开/closures以及由哪个用户

我有一个由多人使用的文档,我们必须不断检查文件是否正在使用以及由谁来使用。

我想知道在R中是否可以获得.xlsx文件的状态,如果它是closures或打开的,谁打开了这个文件。

然后我将这个结果推到一个定期刷新的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
它不应该抛出任何错误或警告,并创build一个.o和.dll文件。

现在在R:
dyn.load('c:\pathtothe_c_file\islocked.dll') result->.C('testLock', islocked=as.integer(0), filename="d:\tools\r\test.dll") result$islocked [1] 1

该DLL被Rlocking,所以这应该返回1.尝试.o文件,它应该返回0.在Windows 7中有一个API和较新的称为IFileInUse这可能会返回进程和可能的文件打开你的用户可能会检查您是否需要更多信息。

IsFileInUse API: http : //msdn.microsoft.com/en-us/library/windows/desktop/ee330722%28v=vs.85%29.aspx

如果您能够在服务器上安装工具,则可以从R命令行运行的命令行上运行的Microsoft实用程序,该实用程序可能会生成所需的内容: http : //technet.microsoft.com/en-us/sysinternals/ bb896655.aspx