Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
必须在Windows 7上运行ruby脚本,并且每次都被拒绝了权限_Ruby_Windows - Fatal编程技术网

必须在Windows 7上运行ruby脚本,并且每次都被拒绝了权限

必须在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

我必须在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/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)因此,谢谢!您可以通过以下链接查找新问题: