文件及文件夹操作

  • 格式:pdf
  • 大小:96.57 KB
  • 文档页数:14

ruby文件操作大全【转】

-------------------------------------------------------------

目录操作:使用Dir类的静态方法或创建一个Dir类的实例对象。

-------------------------------------------------------------

一Dir类的静态方法

Dir类提供了一组静态方法用于目录的创建,删除以及遍历,可以指定路径全名

称增删查目录,缺省操作对象是当前脚本工作目录。

获取当前脚本工作目录

Dir::pwd属性或者Dir.getwd()

改变当前脚本工作目录

Dir::chdir

创建目录

Dir::mkdir

不指定目录全名称时,缺省为工作目录

删除目录

Dir::rmdir

不指定目录全名称时,缺省为工作目录

遍历目录

Dir::foreach(arg1){|item1|segment..}

如果参数arg1中指定了目录全名称,如"d:/ruby/rubywork/",则遍历该指定目

录。

如参数args1中不是目录全名称,如"rubywork",则遍历"当前工作目录

/rubywrok/"。

获取当前脚本目录的方法

我们知道全局变量$0是当前脚本的全路径,所以,可以依靠File.dirname($0)

来获取当前脚本的目录。

(注意:工作目录又称为环境目录,是当前软件运行时的工作目录,当前软件执

行的操作都是基于该工作目录的,工作目录一般是脚本所在目录,但工作目录不

等于脚本所在目录)

二Dir类的实例对象

可以使用Dir.new来创建一个Dir类的实例对象,需要有一个参数,该参数指定

了一个目录,以后该调用该对象的方法,都将基于这个目录。

Dir#close关闭该对象,释放所占资源

Dir#each

遍历对象,方法同Dir::foreach,只是没有参数,遍历当前对象的子文件

Dir#path

返回该实例对象的目录

Dir#read

返回一个子文件

Dir#pos

返回当前子文件指针

Dir#pos=

设置子文件指针

Dir#rewind

设置子文件指针到起始位置

Dir#seek

设置子文件指针

Dir#tell

获取当前指针

-------------------------------------------------

文件操作:使用File类的静态方法,或者File类的实例对象

-------------------------------------------------

三File类的静态方法

File::atime(filename)

返回指定文件的最后访问时间

1.创建文件夹

Dir.new%%1

Dir::mkdir#不指定目录全名称时,缺省为工作目录

Dir::chdir()改变当前脚本工作目录

FileUtils.mkdir'test'

file=File.new("cmd.txt")

file.eachdo|line|

putslineifline=~/target/

end2.创建文件

改变当前根目录

Dir.chdir("/home/guy/sandbox/tmp")

Dir.chroot("/home/guy/sandbox")

Dir.new%%1

#Dir::rmdir#不指定目录全名称时,缺省为工作目录

3.删除文件

改变当前根目录

Dir.chdir("/home/guy/sandbox/tmp")

Dir.chroot("/home/guy/sandbox")

Dir.new%%1

#Dir::rmdir#不指定目录全名称时,缺省为工作目录

4.删除文件夹

#require'fileutils'

FileUtils.rm_r(%%1)

5.删除一个文件下夹所有的文件夹

Dir::chdir

Dir::pwd属性或者Dir.getwd()

#改变当前脚本工作目录

6.清空文件夹

Dir::chdir%%1改变当前脚本工作目录

Dir::rmdir#不指定目录全名称时,缺省为工作目录

Dir.new%%1

#require'ftools'

FileUtils.mkdir'test'

file=File.new(%%1)#"cmd.txt"

file.eachdo|line|

putslineifline=~/target/

end

7.读取文件

#require'ftools'

File.open(%%1).readlines#'文件名'

#require'ftools'

arr=IO.readlines(%%1)#"myfile"

lines=arr.size#puts"myfilehas#{lines}linesinit."

#longest=arr.collect{|x|x.length}.max

#puts"Thelongestlineinithas#{longest}characters."

8.写入文件

f=open(%%1,"w")

f.puts(%%2)

9.写入随机文件

#require'ftools'

file=File.open(%%1,"w")

file.seek(5)

str=file.gets#"fghi"

#require'ftools'

File.open('文件名')

File.open("cmd.txt","r")do|file|

whileline=file.gets

putsline

end

end

puts

file=File.new("cmd.txt","r")

file.each_linedo|line|

putsline

end

IO.foreach("cmd.txt")do|line|

putslineifline=~/target/

putslineifline!~/target/

end

###

Dir#pos

返回当前子文件指针

Dir#pos=

设置子文件指针

Dir#rewind

设置子文件指针到起始位置

Dir#seek

设置子文件指针Dir#tell

获取当前指针

10.读取文件属性

#文件中是否有内容,(返回false为有内容,返回true为空)

File.new('文件名').stat.zero?

#文件大小

File.size?('文件名')

flag1=FileTest::zero?("file1")

flag2=FileTest::size?("file2")

size1=File.size("file1")

size2=File.stat("file2").size

###

File::atime(filename)

返回指定文件的最后访问时间

11.写入属性

12.枚举一个文件夹中的所有文件夹

#require'ftools'

putsDir.glob('**/*').each{|file|file.downcase}

#要区分目录和普通文件我们这样使用

file1=File.new("/tmp")

file2=File.new("/tmp/myfile")

test1=file1.directory?#true

test2=file1.file?#false

test3=file2.directory?#false

test4=file2.file?#true

###

遍历目录

Dir.foreach(%%1){|entry|putsentry}

13.复制文件夹

require"fileutils"

FileUtils.cp%%1,%%2

14.复制一个目录下所有的文件夹到另一个文件夹下

#require'FileUtils'

list=Dir.entries(%%1)

list.each_indexdo|x|

FileUtils.cp"#{list[x]}",%%2if!File.directory?(list[x])

end15.移动文件夹

#require'FileUtils'

FileUtils.mv%%1,%%2

16.移动一个目录下所有的文件夹到另一个目录下

#require'FileUtils'

list=Dir.entries(%%1)

list.each_indexdo|x|

FileUtils.mv"#{list[x]}",%%2if!File.directory?(list[x])

end

17.以一个文件夹的框架在另一个目录创建文件夹和空文件

#########################

//文件是否存在

File.exist?('文件名')

flag=FileTest::exist?("LochNessMonster")

flag=FileTest::exists?("UFO")

#########################

require'rubygems'

require'ruby-debug'

require"find"

moduleCz_dirtools

defmkdirs_to(tar,src=Dir.getwd)

#debugger

iftar.class==NilClassthen

puts"PLZinputtargetdirectoryname..."

return

elsif!FileTest.directory?(tar)#如果tar不是一个目录

puts("Creating#{File.expand_path(tar)}")

Dir.mkdir("#{File.expand_path(tar)}")#创建tar目录

end

src=ifFileTest.directory?(src)then

src#如果src是一个目录名,则返回自身

else

File.dirname(src)#如果src为一个文件名,则返回该文件所在目录

end

#Dir.foreach可以复制目标路径第一层目录结构而不复制子目录

#~Dir.foreach(src)do|dir|

#~ifFileTest.directory?(dir)&&dir!=tar&&dir!='..'&&dir!='.'then

#忽略自身,忽略上级目录"..",忽略本级目录"."

#~#putsdir