重复数据。表fread和fwrite原因“;“拒绝许可”;错误

重复数据。表fread和fwrite原因“;“拒绝许可”;错误,r,data.table,permission-denied,r-4.0.0,R,Data.table,Permission Denied,R 4.0.0,我使用data.tablefwrite()和fread()函数在并行计算中管理资源时遇到了这个问题,但也能够在下面的顺序示例代码中重新创建行为。调用fwrite()会引发以下错误: fwrite(dt,csv_路径)中出错:权限被拒绝:“D:/mypath/test.csv”。无法打开 用于写入的现有文件。你有书面许可吗?这是吗 Windows和其他进程(如Excel)是否已将其打开 该行为似乎与前面调用的fread()有关,因为注释掉fread()命令会使错误消失。根据您的系统,您可能必须在错

我使用
data.table
fwrite()
fread()
函数在并行计算中管理资源时遇到了这个问题,但也能够在下面的顺序示例代码中重新创建行为。调用
fwrite()
会引发以下错误:

fwrite(dt,csv_路径)中出错:权限被拒绝:“D:/mypath/test.csv”。无法打开 用于写入的现有文件。你有书面许可吗?这是吗 Windows和其他进程(如Excel)是否已将其打开

该行为似乎与前面调用的
fread()
有关,因为注释掉
fread()
命令会使错误消失。根据您的系统,您可能必须在错误发生之前增加迭代次数,因为它发生在不同的迭代次数上

有人知道为什么会这样吗?提前感谢您的帮助

示例代码:

library(data.table)

dt = data.table(a = c(1, 2), b = c("a", "b"))
csv_path = "D:/mypath/test.csv"
fwrite(dt, csv_path)

for(i in 1:10000){
  test = fread(csv_path)
  fwrite(dt, csv_path)
}
系统信息

R版本4.0.0(2020-04-24)

平台:x86_64-w64-mingw32/x64(64位)

运行于:Windows Server x64(内部版本14393)

数据表1.12.8


我在Windows计算机上尝试了你的代码,但无法复制

我相信这个问题与Windows文件处理程序有关,它似乎不够快,无法在再次打开之前关闭文件连接

您可以尝试以下代码,以查看它是否仅在R中可复制:

x=“a,b\n1,a\n2,b\n”
csv\u path=“D:/mypath/test.csv”
创建(csv_路径)
f=文件(csv_路径,“w”)
cat(x,文件=f)
关闭(f)
对于(1:10000中的i){
f=文件(csv_路径,“r”)
测试=读线(f)
关闭(f)
f=文件(csv_路径,“w”)
cat(x,文件=f)
关闭(f)
}

<> P>什么也可以理解,<>代码> sys >睡眠>代码>足以使问题消失。

如果在中间放置<代码> sys >睡眠(0.001)有帮助吗?可能windows文件处理程序的速度不够快,无法在使用fread读取文件后关闭该文件?睡眠时间为1 ms时,错误仍会发生,但发生的频率似乎较低。我想增加睡眠时间可以消除这个错误,但也会增加计算的运行时间。令我惊讶的是,使用
read.csv()
write.csv()
组合使用,代码永远不会抛出错误,这让我认为它与
data.table
包有关。我只是让它在Mac上再次运行
398378
迭代。必须是在linux(BTRFS)上运行良好的windows thingRuns。几乎可以肯定是Windows文件系统问题(文件关闭速度不够快),与data.table无关。
write.csv
在实际打开文件连接之前会做很多事情。这些东西花费的时间比你所关心的微秒还要多。