ruby文件操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1ruby文件操作
关键字:file ruby
转!
1检测文件是否存在及其大小
FileTest的exist?方法可以检测一个文件是否存在:
Ruby代码
1.flag=FileTest::exist?("LochNessMonster")
2.flag=FileTest::exists?("UFO")
3.#exists?is a synonym for exist?
Ruby代码
1.flag=FileTest::exist?("LochNessMonster")
2.flag=FileTest::exists?("UFO")
3.#exists?is a synonym for exist?
如果我们想要知道文件是否有内容,可以使用File::Stat的zero?方法:
Ruby代码
1.flag=File.new("somefile").stat.zero?
Ruby代码
1.flag=File.new("somefile").stat.zero?
这个将会返回true,这是因为在ruby中0也是true,nil才是false.
所以我们可以使用size?方法:
Ruby代码
1.if File.new("myfile").stat.size?
2.puts"The file has contents."
3.else
4.puts"The file is empty."
5.end
1.if File.new("myfile").stat.size?
2.puts"The file has contents."
3.else
4.puts"The file is empty."
5.end
FileTest模块里面也有zero?和size?方法:
Ruby代码
1.flag1=FileTest::zero?("file1")
2.flag2=FileTest::size?("file2")
Ruby代码
1.flag1=FileTest::zero?("file1")
2.flag2=FileTest::size?("file2")
这里还有一个size方法:
Ruby代码
1.size1=File.size("file1")
2.size2=File.stat("file2").size
Ruby代码
1.size1=File.size("file1")
2.size2=File.stat("file2").size
2检测特殊文件属性
这边要注意,File类mix了FIleTest模块,并且FileTest模块和File::Stat 模块功能上也有很多重复.
unix/linux有面向字符和面向块的设备。FileTest的方法blockdev?和chardev?可以进行测试:
1.flag1=FileTest::chardev?("/dev/hdisk0")#false
2.flag2=FileTest::blockdev?("/dev/hdisk0")#true
Ruby代码
1.flag1=FileTest::chardev?("/dev/hdisk0")#false
2.flag2=FileTest::blockdev?("/dev/hdisk0")#true
有时我们想要知道一个流是否联系到了终端,这时我们可以使用IO类的tty?方法:
Ruby代码
1.flag1=STDIN.tty?#true
2.flag2=File.new("diskfile").isatty#false
Ruby代码
1.flag1=STDIN.tty?#true
2.flag2=File.new("diskfile").isatty#false
一个流可以是一个管道,或者一个socket:
Ruby代码
1.flag1=FileTest::pipe?(myfile)
2.flag2=FileTest::socket?(myfile)
Ruby代码
1.flag1=FileTest::pipe?(myfile)
2.flag2=FileTest::socket?(myfile)
要区分目录和普通文件我们这样使用:
Ruby代码
1.file1=File.new("/tmp")
2.file2=File.new("/tmp/myfile")
3.test1=file1.directory?#true
4.test2=file1.file?#false
5.test3=file2.directory?#false
6.test4=file2.file?#true
Ruby代码
1.file1=File.new("/tmp")
2.file2=File.new("/tmp/myfile")
3.test1=file1.directory?#true
4.test2=file1.file?#false
5.test3=file2.directory?#false
6.test4=file2.file?#true
File还有一个类方法ftype,他将返回流的类型.他也在File::Stat里面,只不过是实例方法.它的返回值可能是下面的字符
串(file、directory、blockSpecial、characterSpecial、fifo、link或socket).
Ruby代码
1.this_kind=File.ftype("/dev/hdisk0")#"blockSpecial"
2.that_kind=File.new("/tmp").stat.ftype#"directory"
Ruby代码
1.this_kind=File.ftype("/dev/hdisk0")#"blockSpecial"
2.that_kind=File.new("/tmp").stat.ftype#"directory"
要测试一个文件是否为另一个文件的链接,可以使用FileTest的symlink?方法,要计算链接数量,可以使用nlink方法:
Ruby代码
1.File.symlink("yourfile","myfile")#Make a link
2.is_sym=FileTest::symlink?("myfile")#true
3.hard_count=File.new("myfile").stat.nlink#0
Ruby代码
1.File.symlink("yourfile","myfile")#Make a link