2016-09-15 63 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

完美的作品!非常感謝您的及時回覆。 –

相關問題