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

R-检查文件是否打开/关闭以及由哪个用户打开/关闭,r,excel,file,xlsx,R,Excel,File,Xlsx,我有一个多人使用的文档,我们必须不断地检查该文件是否正在使用以及由谁使用 我想知道在R中是否有任何东西可以获取.xlsx文件的状态,它是关闭的还是打开的,以及谁打开了该文件 我会把这个结果推到一个HTML页面上,它会定期刷新,这就可以删除手动检查的需要。 这是一个你可以考虑的起点。此选项使用C代码,您可以使用R Cmd编译并从R调用 在文件“islocked.c”中粘贴以下内容: #include <stdio.h> #include <share.h> void te

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

我想知道在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;
    }
}
#包括
#包括
void testLock(int*locked,char**filename)
{
文件*流;
如果((流=_fsopen(*文件名,“wt”,_shdenywr))!=NULL){
fclose(流);
*锁定=0;
}否则{
*锁定=1;
}
}
打开命令提示符(windows | find | cmd)
更改为您保存上述文件的文件夹
从命令提示符c:\键入以下内容
“程序文件\R\R-3.1.2\bin\R”CMD SHLIB islocked.c

它不应该抛出任何错误或警告,并因此创建.o和.dll文件。

现在在R:

加载('c:\pathtothe\u c\u文件\islocked.dll')
结果->.C('testLock',islocked=as.integer(0),filename=“d:\tools\r\test.dll”)
结果$islocked
[1] 1

dll已被R锁定,因此应返回1。请尝试.o文件,该文件应返回0。Windows 7和更新版本中有一个名为IFileInUse的API,它可能返回进程,也可能返回打开文件的用户,如果需要更多信息,您可以查看该用户

IsFileInUse API:

Microsoft提供的一个实用程序,在命令行上运行,您可以从R中shell到该实用程序,如果您能够在服务器上安装工具,该实用程序可能会生成所需的内容:

您使用的是Linux还是Windows?您是否使用php来管理和输出?您可以创建一个允许访问文件的工作区,而不是直接访问文件。在代码中,您可以使用$clientData(请参见此处),然后您可以在用户每次打开xlsx时创建一种日志文件。然后,您可以用一种带有PHP的cron作业读取日志文件。您也可以使用php函数stat()。我会给它一个镜头,让你知道,我在一个Windows环境中,目前没有使用php只是使用R来创建一个平面HTML页面。据我所知,你将有一个文件,可以被n个用户访问,可能你将是经理。我想你最好解释一下“我会把这个结果推到一个HTML页面上,这个页面会定期刷新,这样就不需要手动检查了”。结果如何?R脚本的数学结果?定期刷新->为此,您应该使用jquery或pusher。刷新后,检索什么?用户id?上次更改文件的日期?为此,也许您应该创建一个日志文件来存储用户id(您可以使用stat())和datetime来链接您的解决方案。Linux上有类似的版本吗?