R - 检查文件是打开/关闭以及由哪个用户

时间:2015-01-05 12:21:31

标签: r excel file xlsx

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

我想知道在R中是否还有我可以获取.xlsx文件的状态,如果它已关闭或打开,以及谁打开了文件。

然后我会将此结果推送到一个定期刷新的HTML页面,这样就不需要手动检查了。

1 个答案:

答案 0 :(得分:1)

以下是您可能会考虑的起点。此选项使用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') result->.C('testLock', islocked=as.integer(0), filename="d:\tools\r\test.dll") result$islocked [1] 1

dll被R锁定,所以这应该返回1.尝试.o文件,它应该返回0.在Windows 7中有一个API,更新的称为IFileInUse,可能会返回进程,可能还有返回该文件的用户打开,如果您需要更多信息,可以查看。

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

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