2016-09-15 38 views
0

我一直在使用read.dbc函数从read.dbc package,它对我来说工作正常。如何在错误句柄后关闭R中的文件连接?

不幸的是,有时要读取的文件已损坏。为了处理这个,我使用try语句。问题是损坏的文件在R中保持“打开”状态,直到我完成了R会话,这种方式在会话结束前我无法删除文件。

我的代码是:

ReadFile <- try(read.dbc("C:/LocalPath/A_File.txt")) 

有没有一种方法来“关闭”过早的连接(无需结束会话)?

此外,我试图删除变量rm(),然后用gc()清理内存,但该文件保持打开状态。

更多细节:RStudio v0.99.484,R V3.3.1(64位),操作系统Windows 7企业版SP1

PS:要重现错误只是尝试读取不是一个DBC文件中的任何文件,例如TXT文件。

+0

这可能是一个好主意,在他们的github页面https://github.com/danicat/read.dbc/issues上报告这个问题,因为看起来'read.dbc'没有正确地关闭文件连接如果遇到错误。 –

+0

@warmoverflow好主意。我已经报告了这个问题,谢谢。 –

回答

1

我不认为这可以在R中完成,因为该文件是从C代码锁定的。如果您查看this文件中的函数dbc2dbf,则可以看到它打开文件并尝试对其进行解压缩。错误“处理”只是打印错误并返回,但不关闭打开的文件,这是不好的做法。 (如果你喜欢一个bug称之为如此。)

如果你愿意,你可以在项目的这个GitHub的网站打开的问题,也许是笔者解决了这个问题。

如果你是迫切需要:一个工作版本,我已经为您编制速战速决只是调用FCLOSE它标志着错误(S)之前(P)。

你可以下载here。只需解压缩并复制到您的R库。加载library(custom.read.dbc)

+0

完美的作品!非常感谢您的及时回复。 –

相关问题