Ruby文件操作
一、文件操作
f=File.new("#{File.dirname(__FILE__)}/temp.m", "w+") f.puts("I am lmy")
1、文件模式
"r" :只读。从文件开头开始(默认模式)。
"r+" :读写。从文件的开头开始。
"w" :只写。将现有文件截断为零长度,或创建用于写入的新文件。
"w+" :读写。将现有文件截断为零长度,或创建用于读取和写入的新文件。
"a" :只写。如果文件存在,则在文件结尾处开始;否则,创建一个新文件以供编写。
"a+" :读写。如果文件存在,则在文件末尾开始;否则,创建用于读取和写入的新文件。
"b" :(仅限DOS/Windows)二进制文件模式。可能与上面列出的任何关键字母一起出现。
2、读取文件
file=File.open("#{File.dirname(__FILE__)}/temp.m","r") file.each { |line| print "#{file.lineno}.", line } file.close
上面读取文件,并一行行输出来。
3、新建、删除、重命名文件
File.new("#{File.dirname(__FILE__)}/tal.txt", "w" ) File.rename("#{File.dirname(__FILE__)}/tal.txt", "#{File.dirname(__FILE__)}/tal_test.txt") File.delete("#{File.dirname(__FILE__)}/tal_test.txt")
二、目录操作
1、创建目录
Dir.mkdir("#{File.dirname(__FILE__)}/testDir")
2、删除目录
Dir.rmdir("#{File.dirname(__FILE__)}/testDir")
3、查询目录里的文件
p=Dir.entries("#{File.dirname(__FILE__)}/testDir") puts(p)
4、遍历目录
Dir.entries("#{File.dirname(__FILE__)}/testDir").each { |e| puts e }
三、ARGV and ARGF
1、ARGV
在运行ruby脚本的时候,所有的参数会以Array的形式保存到ARGV中。
2、ARGF
ARGF则会根据ARGV中的值一个一个的处理,每处理一个就从ARGV中移除一个,直到处理完所有的值。
四、文件信息查询
文件是否存在
p=File::exists?( "cnblogslink.txt" ) # => true
是否是文件
p=File.file?( "cnblogslink.txt" ) # => true
是否是目录
p=File::directory?( "c:/ruby" ) # => true p=File::directory?( "cnblogslink.txt" ) # => false
文件权限
p=File.readable?( "cnblogslink.txt" ) # => true p=File.writable?( "cnblogslink.txt" ) # => true p=File.executable?( "cnblogslink.txt" ) # => false
是否是零长度
p=File.zero?( "cnblogslink.txt" ) # => false
文件大小 bytes
p=File.size?( "cnblogslink.txt" ) # => 74 p=File.size( "cnblogslink.txt" ) # => 74
文件或文件夹
p=File::ftype( "cnblogslink.txt" ) # => "file"
文件创建、修改、最后一次存取时间
p=File::ctime( "cnblogslink.txt" ) # => Sat Sep 19 08:05:07 +0800 2019 p=File::mtime( "cnblogslink.txt" ) # => Sat Sep 19 08:06:34 +0800 2019 p=File::atime( "cnblogslink.txt" ) # => Sat Sep 19 08:05:07 +0800 2019
五、查找文件
puts "查找目录下所有文件及文件夹"
Dir["c:/ruby/*"].each {|x| puts x }
puts "条件查询"
Dir.foreach('c:/ruby') { |x| puts x if x != "." && x != ".." }
puts "查找某一类型文件"
Dir["*.rb"].each {|x| puts x }
puts "Open 查询"
Dir.open('c:/ruby') { |d| d.grep /l/ }.each{|x| puts x} puts "---------------------------" puts "正则表达式查询" Dir["c:/ruby/ruby/[rs]*"].each{|x| puts x} puts "------------------------" Dir["c:/ruby/[^s]*"].each{|x| puts x} puts "------------------------" Dir["c:/ruby/{ruby,li}*"].each{|x| puts x} puts "------------------------" Dir["c:/ruby/?b*"].each{|x| puts x}
puts "查找目录及子目录的文件"
require 'find' Find.find('./') { |path| puts path }
六、查询目录及子目录文件
require "find" Find.find("/etc/passwd", "/var/spool/lp1", ".") do |f| Find.prune if f == "." puts f end 原型:ref.find( [ aName ]* ) {| aFileName | block } prune:Skips the current file or directory, restarting the loop with the next entry. If the current file is a directory, that directory will not be recursively entered. Meaningful only within the block associated with Find::find.
七、文件比较 复制等
require 'ftools' File.copy 'testfile', 'testfile1' » true File.compare 'testfile', 'testfile1' » true