当前位置: 首页 > news >正文

ruby文件操作大全

本文摘自互联网.原文作者不详.

1.创建文件夹 
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

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 


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.文件关联

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.从剪贴板复制图像到窗体 


转载于:https://www.cnblogs.com/ToDoToTry/archive/2011/09/26/2192357.html

相关文章:

  • MySQL管理员指南之--MySQL用户管理
  • Object-c 一些代码规范
  • t-sql导出EXCEL语句--待测试
  • 冷月枫林
  • PHP 计算程序运行的时间
  • 文本框自动撑高JQ插件
  • 11.23 IBeamMDAAMembershipProvider 是什么?如何使用?
  • C# WinForm开发系列 - File
  • XML中Xpath语法的使用
  • 9、如何控制框架页面或iframe内嵌页面在指定页面(区域)打开页面? [除了div+css,框架页面也不能忘记]...
  • POJ3590 The shuffle Problem——置换群+DP/递推预处理
  • 生成excel控制类
  • jdk和tomcat环境变量配置
  • SQL中的行号ROW_NUMBER()
  • 使用 CTTeleyphonyCenter 截获来去电及短信消息
  • 【EOS】Cleos基础
  • 【个人向】《HTTP图解》阅后小结
  • 2019年如何成为全栈工程师?
  • css属性的继承、初识值、计算值、当前值、应用值
  • Date型的使用
  • ES6之路之模块详解
  • Fundebug计费标准解释:事件数是如何定义的?
  • JAVA_NIO系列——Channel和Buffer详解
  • Map集合、散列表、红黑树介绍
  • MD5加密原理解析及OC版原理实现
  • ng6--错误信息小结(持续更新)
  • Python中eval与exec的使用及区别
  • Sass 快速入门教程
  • ViewService——一种保证客户端与服务端同步的方法
  • vue-router的history模式发布配置
  • 测试如何在敏捷团队中工作?
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 工作手记之html2canvas使用概述
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 聚簇索引和非聚簇索引
  • 双管齐下,VMware的容器新战略
  • 算法-图和图算法
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 我从编程教室毕业
  • 我是如何设计 Upload 上传组件的
  • 一个完整Java Web项目背后的密码
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​iOS实时查看App运行日志
  • ​水经微图Web1.5.0版即将上线
  • ###项目技术发展史
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (2)STM32单片机上位机
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (二)windows配置JDK环境
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (离散数学)逻辑连接词
  • (七)Java对象在Hibernate持久化层的状态