必须在Windows 7上运行ruby脚本,并且每次都被拒绝了权限
我必须在Windows7上运行ruby脚本(我知道这是个坏主意)。 我的脚本创建文件夹(如果它们不存在)并将文件复制到其中。 我正在使用FileUtils lib执行此任务,如:必须在Windows 7上运行ruby脚本,并且每次都被拒绝了权限,ruby,windows,Ruby,Windows,我必须在Windows7上运行ruby脚本(我知道这是个坏主意)。 我的脚本创建文件夹(如果它们不存在)并将文件复制到其中。 我正在使用FileUtils lib执行此任务,如: FileUtils.mkdir_p(path) FileUtils.cp_r(file.path, path) FileUtils.touch(file) 在ubuntu和mac上一切正常,但在windows 7机器上我遇到了下一个错误: Permission denied - ./program_folder/in
FileUtils.mkdir_p(path)
FileUtils.cp_r(file.path, path)
FileUtils.touch(file)
在ubuntu和mac上一切正常,但在windows 7机器上我遇到了下一个错误:
Permission denied - ./program_folder/input/. (Errno::EACCES)
在此代码行上:
Dir.entries('./program_folder/input').map { |file_name| File.new("./program_folder/input/#{file_name}") }.compact
有什么好主意吗?我怎么修
我已尝试使用管理员权限运行ruby和irb termianl,并尝试在所有路径上运行FileUtils.chmod\R(0777,@path),但仍然没有更改…您的命令
Dir.entries('./program_folder/input').map { |file_name|
File.new("./program_folder/input/#{file_name}")
}.compact
尝试创建与以前读取的文件/文件夹同名的文件
详细内容:
Dir.entries('.')
找到的第一个文件是实际目录(
)“/program\u folder/input/{file\u name}”是/program\u folder/input/
(一个现有目录)
File.new
无法将目录作为文件打开评论后的评论: 在
Dir.entries
中调用File.new
——创建文件句柄。如果没有模式,它会尝试打开现有文件(文件,而不是目录!)<代码>是一个无法作为文件打开的目录
如果只需要文件名,则不需要File.new
,字符串“/program\u folder/input/{File\u name}”
就足够了。
更好的解决方案是File.join
方法:
File.join("./program_folder/input", file_name)
或
如果需要真实文件名,可以检查目录:
Dir.entries('./program_folder/input').map { |file_name|
"./program_folder/input/#{file_name}" unless File.directory?("./program_folder/input/#{file_name}")
}.compact
Dir.entries('.').delete_if{|file_name|
File.directory?(file_name)
}
或者更好,您可以删除以下目录:
Dir.entries('./program_folder/input').map { |file_name|
"./program_folder/input/#{file_name}" unless File.directory?("./program_folder/input/#{file_name}")
}.compact
Dir.entries('.').delete_if{|file_name|
File.directory?(file_name)
}
我没有覆盖文件,我只是用这个目录中的所有文件对象创建一个数组。“File.new根据给定模式打开以文件名命名的文件,并返回一个新的文件对象。”请参阅我的编辑。我想,我现在明白了您想要实现的目标。我明白了,我通过简单的检查从列表中删除了“.”和“..”:Dir.entries(“./program\u folder/input”).map{file\u name{file.new(“./program\u folder/input/{file\u name}”),除非file\u name=~/^\.?$/}.compact,现在我在“utime”中的Fileutils出现了另一个错误:Fileutils.touch(file)因此,谢谢!您可以通过以下链接查找新问题: