zoukankan      html  css  js  c++  java
  • 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.从剪贴板复制图像到窗体 


    作者: fandyst
    出处: http://www.cnblogs.com/todototry/
    关注语言: python、javascript(node.js)、objective-C、java、R、C++
    兴趣点: 互联网、大数据技术、大数据IO瓶颈、col-oriented DB、Key-Value DB、数据挖掘、模式识别、deep learning、开发与成本管理
    产品:
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
  • 相关阅读:
    找水王
    用户体验评价
    人件集阅读笔记01
    第十四周学习进度
    第十三周学习进度
    第十二周学习进度
    第十一周学习进度
    梦断代码阅读笔记03
    团队项目-第一阶段冲刺-10
    Shell按行读取文件的3种方法
  • 原文地址:https://www.cnblogs.com/ToDoToTry/p/2192357.html
Copyright © 2011-2022 走看看