Tag: file io

什么是Ruby文件I / O中的EOFError?

官方文档没有说明。 我理解EOFError的意思是“文件结束错误”,但究竟是什么意思呢? 如果文件阅读器到达文件的末尾,那对我来说听起来不是一个错误。

Ruby 1.8.7中的File.open和块

我对ruby很新,我正在阅读Pickaxe书籍以熟悉所有内容。 我遇到了File.open部分,它讨论了将一个块作为File.open调用的参数,然后保证文件已关闭。 现在这听起来像是一种绝对精彩的方式来避免在脚下射击自己,因为我的脚趾很危险,我想我会试一试。 这就是我写的内容(如果重要的话,请写一遍): File.open(‘somefile.txt’, ‘r’).each { |line| puts line }“ 我的期望是somefile.txt文件会被打开,读取,打印和关闭,对吧? 据我说错了。 如果我使用lsof来查看打开的文件句柄,它仍然是打开的。 但是,如果我这样做 f = File.open(‘somefile.txt’, ‘r’).each { |line| puts line } f.close() 我在这个例子中使用了错误的块,或者在与块一起使用时我没有理解File.open的含义。 我已经阅读了与File.open相关的ruby-doc.org部分, 但这似乎证实了我正在做的事情应该按预期工作。 谁能解释我做错了什么?

在ruby中一次读取N行文件

我有一个大文件(数百兆),由文件名组成,每行一个。 我需要循环遍历文件名列表,并为每个文件名分叉一个进程。 我希望一次最多8个分叉进程,我不想一次将整个文件名列表读入RAM。 我甚至不确定从哪里开始,任何人都可以帮助我吗?

在指定目录中创建文件

如何在特定目录中创建新文件。 我创建了这个类: class FileManager def initialize() end def createFile(name,extension) return File.new(name <<"."<<extension, "w+") end end 我想指定一个目录(路径)创建文件的位置。 如果这个不存在,他将被创建。 因此,我必须在文件创建后立即使用fileutils ,或者我可以在创建中直接指定创建文件的位置吗? 谢谢

漂亮打印到ruby中的文件

我试图将哈希打印到文件。 我尝试了unix重定向[逐步添加不同的标志]: `echo #{pp mymap} | tee summary.out 2>&1` 和文件IO my_file = File.new(@dir_+”/myfile.out”,’w+’) my_file.puts `#{pp get_submap_from_final(all_mapping_file,final_map)}` 它总是打印到控制台并且不写入文件。 还有一种更简单的方法可以在ruby中的一行中写入文件吗? 而不是做File.new,然后写入文件?

如果只在ruby中不存在文件时,如何打开文件

我想打开一个文件进行写入,但前提是它尚不存在。 如果文件存在,我想引发exception。 这是最好的方法吗? filename = ‘foo’ raise if File.exists? filename File.open(filename, ‘w’) do |file| file.write contents end 没有竞争条件,最惯用的方法是什么?

Ruby在哪里跟踪其打开的文件描述符?

这个问题与此无关 这个问题不是关于如何使用File #close或File#open block语法自动关闭文件。 这是一个关于Ruby在运行时存储其打开文件描述符列表的问题。 实际问题 如果您的程序具有开放描述符,但您无权访问相关的文件或IO对象,那么如何找到对当前打开的文件描述符的引用? 举个例子: filename=’/tmp/foo’ %x( touch “#{filename}” ) File.open(filename) filehandle = File.open(filename) 第一个File实例被打开,但对象的引用不存储在变量中。 第二个实例存储在filehandle中,我可以使用#inspect或#close轻松访问它。 但是,丢弃的File对象没有消失; 它只是无法以任何明显的方式访问。 在对象完成之前,Ruby必须在某个地方跟踪它…但在哪里?

如何从文件中获取特定行

是否可以从知道其行号的文件中提取特定行? 例如,只是从文件“text.txt”中获取第N行的内容作为字符串?

Ruby:如何确定正在读取的文件是二进制还是文本

我正在用Ruby编写一个程序,它将在目录中的文本文件中搜索字符串 – 类似于Grep。 我不希望它尝试搜索二进制文件,但我无法在Ruby中找到确定文件是二进制文件还是文本的方法。 该程序需要在Windows和Linux上运行。 如果有人能指出我正确的方向,这将是伟大的。 谢谢, Xanthalas

如何逐行读取gzip文件?

我有一个gzip文件,目前我这样读了: infile = open(“file.log.gz”) gz = Zlib::GzipReader.new(infile) output = gz.read puts result 我认为这会将文件转换为字符串,但我想逐行阅读。 我想要完成的是该文件有一些垃圾的警告消息,我想grep这些警告消息,然后将它们写入另一个文件。 但是,一些警告信息会被重复,所以我必须确保我只对它们进行一次grep。 因此逐行阅读会对我有所帮助。