ruby网络编程(2)

发布时间 2023-07-06 11:05:44作者: 水宝石

文件读写

二进制模式

  • 复制文件
#!/usr/bin/ruby 
#encoding:UTF-8
#!/usr/bin/ruby 
#encoding:UTF-8
myOldFile=File.new("testrb.txt",'r',binmode:true)
myNewFile=File.new("testrbnew.txt",'w',binmode:true)
while charData=myOldFile.read(1)
	myNewFile.write(charData)
	print "."
end
myOldFile.close()
myNewFile.close()
  • 异或加解密
#!/usr/bin/ruby 
#encoding:UTF-8
#!/usr/bin/ruby 
#encoding:UTF-8
myOldFile=File.new("testrb.txt",'r',binmode:true)
myNewFile=File.new("testrbnew.dat",'w',binmode:true)
passWd="The jQuery library exposes its methods and properties via two properties of the window object called jQuery and $. $ is simply an alias for jQuery and it's often employed because it's shorter and faster to write."
i=0
while charData=myOldFile.read(1)
	myNewFile.write((charData.ord ^ passWd[i].ord).chr)
	i+=1
	i = i % passWd.length
	print "#{i}."
end
myOldFile.close()
myNewFile.close()
puts ""
puts "-------------"
myDFile=File.new("testrbnew.txt",'w',binmode:true)
mySFile=File.new("testrbnew.dat",'r',binmode:true)
i=0
while charData=mySFile.read(1)
	myDFile.write((charData.ord ^ passWd[i].ord).chr)
	i+=1
	i = i % passWd.length
	print "#{i}."
end
myDFile.close()
mySFile.close()



压缩与解压缩

rubyzip是一个用于读取和写入zip文件的ruby库。

gem install rubyzip

gem 'rubyzip'

ZipInputStream是用于读取zip文件中的zip条目的基本类。可以直接创建ZipInputStream对象,将zip文件名传递给构造函数,但通常情况下,ZipInputStream将从ZipFile(可能使用ZipFileSystem接口)对象中获得,用于zip存档中的特定条目。

ZipInputStream继承了IOExtras::AbstractInputStream,以便提供一个类似IO的接口来读取单个zip条目。除了模拟IO对象的方法之外,它还包含用于迭代归档条目的方法get_next_entry。get_next_entry返回一个ZipEntry对象,该对象描述ZipInputStream当前正在读取的zip条目。

使用ZipOutputStream创建zip存档并使用ZipInputStream再次读取它的示例。
image

[maisipu@192 learn]$ cat ziptest/test/myZipFile
我的zip文件
[maisipu@192 learn]$ 

require 'rubygems'
require 'zip'

folder = `pwd`.chomp 
inputFilenames = `ls -p | grep -v /`.split("\n")

zipFileName = File.join(folder, 'ziptest/test.zip')

Zip::File.open(zipFileName, create: true) do |zipFile|
  inputFilenames.each do |fileName|
    zipFile.add(fileName, File.join(folder, fileName))
  end
  zipFile.get_output_stream("myZipFile") { |f| f.puts "我的zip文件" }
end