重复 data.table fread 和 fwrite 导致 "Permission denied" 错误
Repeated data.table fread and fwrite causes "Permission denied" error
我使用 data.table
fwrite()
和 fread()
函数在并行计算中管理资源时遇到了这个问题,但也能够在下面的顺序示例代码中重新创建行为.调用 fwrite()
会引发以下错误:
Error in fwrite(dt, csv_path) : Permission denied: 'D:/mypath/test.csv'. Failed to open
existing file for writing. Do you have write permission to it? Is this
Windows and does another process such as Excel have it open?
该行为似乎与之前调用 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 version 4.0.0 (2020-04-24)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows Server x64 (build 14393)
data.table_1.12.8
我在 Windows 机器上试过你的代码,但我无法重现它。
我认为这个问题与 Windows 文件处理程序有关,它似乎不够快,无法在再次打开文件连接之前关闭文件连接。
您可以尝试以下代码,看看它是否可以仅在 R 中重现:
x = "a,b\n1,a\n2,b\n"
csv_path = "D:/mypath/test.csv"
file.create(csv_path)
f = file(csv_path, "w")
cat(x, file=f)
close(f)
for (i in 1:10000) {
f = file(csv_path, "r")
test = readLines(f)
close(f)
f = file(csv_path, "w")
cat(x, file=f)
close(f)
}
还有一点有意义的是,看看有多少 Sys.sleep
足以使问题消失。
我使用 data.table
fwrite()
和 fread()
函数在并行计算中管理资源时遇到了这个问题,但也能够在下面的顺序示例代码中重新创建行为.调用 fwrite()
会引发以下错误:
Error in fwrite(dt, csv_path) : Permission denied: 'D:/mypath/test.csv'. Failed to open existing file for writing. Do you have write permission to it? Is this Windows and does another process such as Excel have it open?
该行为似乎与之前调用 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 version 4.0.0 (2020-04-24)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows Server x64 (build 14393)
data.table_1.12.8
我在 Windows 机器上试过你的代码,但我无法重现它。
我认为这个问题与 Windows 文件处理程序有关,它似乎不够快,无法在再次打开文件连接之前关闭文件连接。
您可以尝试以下代码,看看它是否可以仅在 R 中重现:
x = "a,b\n1,a\n2,b\n"
csv_path = "D:/mypath/test.csv"
file.create(csv_path)
f = file(csv_path, "w")
cat(x, file=f)
close(f)
for (i in 1:10000) {
f = file(csv_path, "r")
test = readLines(f)
close(f)
f = file(csv_path, "w")
cat(x, file=f)
close(f)
}
还有一点有意义的是,看看有多少 Sys.sleep
足以使问题消失。