浏览 27540 次
锁定老帖子 主题:ruby文件操作大全
精华帖 (6) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-11-15
Dir.new %%1 Dir::mkdir #不指定目录全名称时,缺省为工作目录 Dir::chdir() 改变当前脚本工作目录 FileUtils.mkdir 'test' file = File.new("cmd.txt") file.each do |line| puts line if line =~ /target/ end 2.创建文件 改变当前根目录 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.each do |line| puts line if line =~ /target/ end 7.读取文件 #require 'ftools' File.open(%%1).readlines #'文件名' #require 'ftools' arr = IO.readlines(%%1) #"myfile" lines = arr.size #puts "myfile has #{lines} lines in it." #longest = arr.collect {|x| x.length}.max #puts "The longest line in it has #{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| while line=file.gets puts line end end puts file=File.new("cmd.txt","r") file.each_line do |line| puts line end IO.foreach("cmd.txt") do |line| puts line if line =~ /target/ puts line if line !~ /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' puts Dir.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| puts entry} 13.复制文件夹 require "fileutils" FileUtils.cp %%1,%%2 14.复制一个目录下所有的文件夹到另一个文件夹下 #require 'FileUtils' list=Dir.entries(%%1) list.each_index do |x| FileUtils.cp "#{list[x]}",%%2 if !File.directory?(list[x]) end 15.移动文件夹 #require 'FileUtils' FileUtils.mv %%1,%%2 16.移动一个目录下所有的文件夹到另一个目录下 #require 'FileUtils' list=Dir.entries(%%1) list.each_index do |x| FileUtils.mv "#{list[x]}",%%2 if !File.directory?(list[x]) end 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-11-15
17.以一个文件夹的框架在另一个目录创建文件夹和空文件
######################### //文件是否存在 File.exist?('文件名') flag = FileTest::exist?("LochNessMonster") flag = FileTest::exists?("UFO") ######################### require 'rubygems' require 'ruby-debug' require "find" module Cz_dirtools def mkdirs_to(tar,src=Dir.getwd) #debugger if tar.class==NilClass then puts "PLZ input target directory name..." return elsif !FileTest.directory?(tar)#如果tar不是一个目录 puts ("Creating #{File.expand_path(tar)}") Dir.mkdir("#{File.expand_path(tar)}")#创建tar目录 end src=if FileTest.directory?(src) then src#如果src是一个目录名,则返回自身 else File.dirname(src)#如果src为一个文件名,则返回该文件所在目录 end #Dir.foreach可以复制目标路径第一层目录结构而不复制子目录 #~ Dir.foreach(src) do |dir| #~ if FileTest.directory?(dir) && dir!=tar && dir!='..' &&dir!='.' then #忽略自身,忽略上级目录"..",忽略本级目录"." #~ #puts dir #~ begin #~ Dir.mkdir("#{File.expand_path(tar)}/#{dir}") #~ rescue#如果该目录已存在则直接跳过否则创建该目录 #~ end #~ end #~ end #Find.find可以复制目标路径的完整目录结构,包括子目录 dirs=Array.new Find.find(src) do |dir| unless !FileTest.directory?(dir) || File.basename(dir)==tar || File.basename(dir)=='..' || File.basename(dir)=='.' || File.basename(dir)==File.basename(src)#忽略自身,忽略上级目录"..",忽略本级目录"." dirs<<dir end end #puts dirs dirs.each do |dir| begin Dir.mkdir("#{File.expand_path(tar)}/#{dir.gsub(src,'')}") rescue#如果该目录已存在则直接跳过否则创建该目录 end end end end require 'rubygems' require 'ruby-debug' require "find" module Cz_dirtools def mkdirs_to(tar,src=Dir.getwd) #debugger if tar.class==NilClass then puts "PLZ input target directory name..." return elsif !FileTest.directory?(tar)#如果tar不是一个目录 puts ("Creating #{File.expand_path(tar)}") Dir.mkdir("#{File.expand_path(tar)}")#创建tar目录 end src=if FileTest.directory?(src) then src#如果src是一个目录名,则返回自身 else File.dirname(src)#如果src为一个文件名,则返回该文件所在目录 end #Dir.foreach可以复制目标路径第一层目录结构而不复制子目录 #~ Dir.foreach(src) do |dir| #~ if FileTest.directory?(dir) && dir!=tar && dir!='..' &&dir!='.' then #忽略自身,忽略上级目录"..",忽略本级目录"." #~ #puts dir #~ begin #~ Dir.mkdir("#{File.expand_path(tar)}/#{dir}") #~ rescue#如果该目录已存在则直接跳过否则创建该目录 #~ end #~ end #~ end #Find.find可以复制目标路径的完整目录结构,包括子目录 dirs=Array.new Find.find(src) do |dir| unless !FileTest.directory?(dir) || File.basename(dir)==tar || File.basename(dir)=='..' || File.basename(dir)=='.' || File.basename(dir)==File.basename(src)#忽略自身,忽略上级目录"..",忽略本级目录"." dirs<<dir end end #puts dirs dirs.each do |dir| begin Dir.mkdir("#{File.expand_path(tar)}/#{dir.gsub(src,'')}") rescue#如果该目录已存在则直接跳过否则创建该目录 end end end end 18.复制文件 #require 'FileUtils' FileUtils.cp %%1, %%2 19.复制一个目录下所有的文件到另一个目录 #require 'FileUtils' list=Dir.entries(%%1) list.each_index do |x| FileUtils.cp "#{list[x]}",%%2 if !File.directory?(list[x]) end 20.提取扩展名 21.提取文件名 %%2 = File.basename(%%1) 22.提取文件路径 %%2 = File.dirname(%%1) 23.替换扩展名 24.追加路径 25.移动文件 26.移动一个文件夹下所有文件到另一个目录 #require 'FileUtils' list=Dir.entries(%%1) list.each_index do |x| FileUtils.mv "#{list[x]}",%%2 if !File.directory?(list[x]) end 27.指定目录下搜索文件 #require "find" def findfiles(dir, name) list = [] Find.find(dir) do |path| Find.prune if [".",".."].include? path case name when String list << path if File.basename(path) == name when Regexp list << path if File.basename(path) =~ name else raise ArgumentError end end list end findfiles %%1,%%2 #"/home/hal", "toc.txt" 28.打开对话框 29.文件分割 逐字节对文件进行遍历 可以使用each_byte方法,如果你想要转换byte到字符的话使用chr方法: file = File.new("myfile") e_count = 0 file.each_byte do |byte| e_count += 1 if byte == ?e end 30.文件合并 逐字节对文件进行遍历 可以使用each_byte方法,如果你想要转换byte到字符的话使用chr方法: file = File.new("myfile") e_count = 0 file.each_byte do |byte| e_count += 1 if byte == ?e end |
|
返回顶楼 | |
发表时间:2009-11-15
31.文件简单加密
32.文件简单解密 33.读取ini文件属性 34.合并一个文件下所有的文件 35.写入ini文件属性 36.获得当前路径 File.dirname($0) 37.读取XML数据库 38.写入XML数据库 39.ZIP压缩文件 #require 'rubygems' #require 'zip/zipfilesystem' Zip::ZipFile.open(%%1, Zip::ZipFile::CREATE) do |zip| #'zipfile.zip' zip.file.open('file1', 'w') { |f| f << 'This is file 1.' } zip.dir.mkdir('sub_dir') zip.file.open('sub_dir/file2', 'w') { |f| f << 'This is file 2.' } end 40.ZIP解压缩 41.获得应用程序完整路径 42.ZIP压缩文件夹 #require 'rubygems' #require 'zip/zipfilesystem' def compress Zip::ZipFile.open 'zipfile.zip', Zip::ZipFile::CREATE do |zip| add_file_to_zip('dir', zip) end end def add_file_to_zip(file_path, zip) if File.directory?(file_path) Dir.foreach(file_path) do |sub_file_name| add_file_to_zip("#{file_path}/#{sub_file_name}", zip) unless sub_file_name == '.' or sub_file_name == '..' end else zip.add(file_path, file_path) end end add_file_to_zip %%1,%%2 43.递归删除目录下的文件 #require 'ftools' file_path = String.new file_path="D:" if File.directory? file_path Dir.foreach(file_path) do |file| if file!="." and file!=".." puts "File:"+file end end end 44.验证DTD 45.Schema 验证 46.Grep #!/usr/bin/env ruby # Grep with full regexp-functionality via ruby if ARGV.shift == "-p" pattern = Regexp.new(ARGV.shift) else puts "Please give me a pattern with the '-p' option" exit end ARGV.each do |filename| File.open(filename) do |file| file.each do |line| puts "#{filename} #{file.lineno.to_s}: #{line}" if pattern.match(line) end end end Using it via: rgrep -p '/delete /i' *.php does not match anything, but this #!/usr/bin/env ruby # Grep with full regexp-functionality via ruby if ARGV.shift == "-p" pattern = Regexp.new(ARGV.shift) else puts "Please give me a pattern with the '-p' option" exit end ARGV.each do |filename| File.open(filename) do |file| file.each do |line| puts "#{filename} #{file.lineno.to_s}: #{line}" if /delete /i.match(line) end end end 47.直接创建多级目录 #require "fileutils" FileUtils.makedirs(%%1) 48.批量重命名 49.文本查找替换 ReplaceText 50.文件关联 |
|
返回顶楼 | |
发表时间:2009-11-15
51.操作Excel文件
52.设置JDK环境变量 53.选择文件夹对话框 54.删除空文件夹 55.发送数据到剪贴板 56.从剪贴板中取数据 57.获取文件路径的父路径 58.创建快捷方式 CreateShortCut 59.弹出快捷菜单 60.文件夹复制到整合操作 61.文件夹移动到整合操作 62.目录下所有文件夹复制到整合操作 63.目录下所有文件夹移动到整合操作 64.目录下所有文件复制到整合操作 65.目录下所有文件移动到整合操作 66.对目标压缩文件解压缩到指定文件夹 67.创建目录副本整合操作 68.打开网页 69.删除空文件夹整合操作 70.获取磁盘所有分区后再把光驱盘符去除(用"\0"代替),把结果放在数组allfenqu[] 中,数组中每个元素代表一个分区盘符,不包括 :\\ 这样的路径,allfenqu[]数组开始时存放的是所有盘符。 当我用这样的代码测试结果是正确的,光驱盘符会被去掉: CString root; //root代表盘符路径 for(i=0;i<20;i++) //0-20代表最大的盘符数 { root.Format("%c:\\",allfenqu[i]); if(GetDriveType(root)==5) allfenqu[i]='\0'; } 但我用这样的代码时结果却无法去掉光驱盘符,allfenqu[]中还是会包含光驱盘符: CString root; for(i=0;i<20;i++) { root=allfenqu[i]+":\\"; if(GetDriveType(root)==5) allfenqu[i]='\0'; } 71.激活一个程序或程序关联的文件 72.HTTP下载 73.FTP下载 74.写图像到剪切板 setClipboardImage 75.从剪贴板复制图像到窗体 |
|
返回顶楼 | |