# where userid is any intger [sic]
path = Rails.root + "public/system/users/#{user.id}/style/img.jpg"
File.open(path, 'wb') do |file|
file.puts f.read
end
"r" Read-only, starts at beginning of file (default mode).
"r+" Read-write, starts at beginning of file.
"w" Write-only, truncates existing file
to zero length or creates a new file for writing.
"w+" Read-write, truncates existing file to zero length
or creates a new file for reading and writing.
"a" Write-only, each write call appends data at end of file.
Creates a new file for writing if file does not exist.
"a+" Read-write, each write call appends data at end of file.
Creates a new file for reading and writing if file does
not exist.
7条答案
按热度按时间vof42yt11#
File.open(..., 'w')
创建一个不存在的文件。没有人承诺它会为它创建一个目录树。另外,应该使用
File#join
来构建目录路径,而不是使用哑字符串连接。yacmzcpb2#
当
File.open(..., 'w')
无法打开文件时,即由于Windows 10下受保护的文件夹访问,您也会收到此错误。fafcakar3#
在我的情况是因为在方法上面我有:
因此它为下一个
File.open
或File.readlines
调用改变当前目录。jogvjijk4#
我在尝试用Ruby创建文件时遇到了这个问题。
我正在尝试使用下面的命令创建新文件:
以及
但是我得到了下面的错误:
(irb):1:在"初始化"中:没有这样的文件或目录@rb_sysopen-testfile(错误号::ENOENT)
问题是我没有为文件指定正确的模式。创建新文件的格式是:
或
各种模式包括:
然而,我的命令
File.new("testfile", "r")
使用的是"r" Read-only
模式,它试图从一个名为testfile
的现有文件中读取,而不是创建一个新的文件。我所要做的就是修改命令以使用"w" Write-only
模式:或
t9eec4r05#
我遇到了同样的错误,不得不用
URI.open()
替换open()
。最小可重现示例
这会产生错误
..但在将
open()
替换为URI.open()
后,没有错误:vwoqyblh6#
请使用
或
o2g1uqev7#
尝试在rake任务中使用
gets
?您可能会看到以下错误消息:错误编号::错误:没有这样的文件或目录@rb_sysopen
你试过搜索错误吗,最后出现在这个页面上?这个答案不是给操作员的,而是给你的。
使用
STDIN.gets
。问题解决了。这是因为仅仅使用gets
就可以解析回$stdin.gets
,并且rake正在覆盖全局变量,以便gets
尝试打开一个不存在的文件句柄。原因如下:What's the difference between gets.chomp() vs. STDIN.gets.chomp()?