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

标签 r excel file xlsx

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

我想知道 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/

相关文章:

c - 如何读取文本文件

r - data.table 中具有条件的每组总和

r - 如何将离散因子水平视为连续?

cocoa - 如果我尝试将项目替换为不同的卷,replaceItemAtURL 将不起作用

file - 如何使用 COBOL 从文件中删除重复项?

excel - 使用 "if"函数识别特定时间

r - 如何将 MATLAB 结构加载到 R 数据框中?

r - 创建 zip 文件 : error running command "" had status 127

excel - 将 Excel 工作表保存到 SQL 中

excel - 无论它们的顺序如何,如何检查相同的值组合