fread (data.table)锁定文件

6
我使用data.table包中的fread函数。当我尝试修改或删除文件(只需用记事本打开)时,Windows会提示:

enter image description here

如何解除此绑定?

编辑:

在R中尝试也得到相同的结果。

cat(file="C:/Users/MCarrie/Desktop/test/test2.txt")
Error in file(file, ifelse(append, "a", "w")) : 
  cannot open the connection
In addition: Warning message:
In file(file, ifelse(append, "a", "w")) :
  cannot open file 'C:/Users/MCarrie/Desktop/test/test2.txt': Permission denied

信息:

> sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United Kingdom.1252  LC_CTYPE=English_United Kingdom.1252   
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C                           
[5] LC_TIME=English_United Kingdom.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] data.table_1.8.8

loaded via a namespace (and not attached):
[1] tools_3.0.1

> showConnections(all=T)
  description class      mode text   isopen   can read can write
0 "stdin"     "terminal" "r"  "text" "opened" "yes"    "no"     
1 "stdout"    "terminal" "w"  "text" "opened" "no"     "yes"    
2 "stderr"    "terminal" "w"  "text" "opened" "no"     "yes"  

读取的文件:(意围意故意省略引号)

"AA",3,4,5,"w"
"ss,2,3,4,"s"
"ww",2,3,3,"s"

@JoshuaUlrich 没错,通过 W7 上的 RStudio。我拒绝提供版本号等信息,因为它们不在 OP 中,所以在共享该信息之前有点无用。另外,我想知道他们是否在同一会话中打开了另一个连接。 - Simon O'Hanlon
@SimonO101,R本身也无法看到更新。 - nigmastar
@nigmastar 请添加所需的信息。此外,如果您使用管理员权限打开R(右键单击R并以管理员身份运行),您是否看到此问题? - Simon O'Hanlon
3
抱歉问题比较蠢,但是 data.table::fread 在读取完成后会执行 close 吗? - Carl Witthoft
@GSee 哈哈,我明白了。会去看看的...(顺便说一句,我想 Stack Overflow 在每个评论中只允许有一个 <at> 标记。我没有收到 <at>MatthewDowle 的通知,我想是因为它是第二个出现的吧)。 - Matt Dowle
显示剩余8条评论
1个回答

5
请使用 data.table v1.8.11 重试。在data.table主页上提供了新的Windows压缩包。
NEWS中得知:
如果fread返回数据错误(例如在特定行上有不平衡的引号),它现在会首先关闭文件,而不是保持锁定状态,这是仅在Windows上出现的问题。感谢nigmastar的报告和Carl Witthoft的提示。添加了测试。

哇!太好了,我今天早上刚检查了1.8.9版本,但今天还在开发中。谢谢!(希望很快能在1.8.11版本中看到通过引用添加/修改/删除行的功能:-)...)无论如何,你有没有注意到上面使用的文本文件中缺少双引号?这个问题只会在这种情况下出现。 - Michele
@Michele 我注意到了双引号,但肯定不是那个问题吧?这是一个文件打开/锁定问题,当nigmastar尝试编辑文件以修复缺失的引号时发生的。在Windows上。希望v1.8.10可以解决这个问题。 - Matt Dowle
@nigmastar 看看新答案。请确认是否解决了问题。谢谢。 - Matt Dowle
@MattDowle 你好,我正在使用 v1.10.4 版本,在 Windows 上出现了文件锁定问题。这一行在某个地方有额外的分隔符(\t)。预期有5列,但处理完所有列后第18087行包含文本。 - bezout
1
@bezout 最近在 fread 上有很多工作,Windows 上的表现也更好了。请尝试使用来自开发者的 Windows 二进制 .zip(无需编译工具)。 - Matt Dowle
1
@bezout 这是开发中的第四个错误修复,可以在新闻页面上找到:fread()在大样本外的某一行有太多字段并生成错误时,不再对文件保持打开锁定,#2044。感谢Hugh Parsonage的报告。 - Matt Dowle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接