【发布时间】:2024-01-15 11:15:01
【问题描述】:
所以我有这个程序可以传递一个字符串(这个字符串是它应该读取的文件的路径)
现在我有一个必须打开该文件的方法。使用 Gsub 更改文本,然后再次输出该文件(无法编辑原始文件),但我最终需要输出更改后的文件
这是我用来更改文件的方法(简化)
def self.changeFile(myfile)
myfile = @path
doc = File.open(myfile)
text = doc.read
text.gsub!("change" , "changed")
return text
问题是我将整个文件作为字符串返回。我的其他方法使用“字符串”路径名的输入
所以我的问题是无论如何我可以将我的文本写入我在内存中更改的文件,所以实际上不更改原始文件?
我在考虑使用“Tempfile”或“StringIO”,但我不知道这样做是否正确
感谢所有帮助
【问题讨论】:
-
您要创建另一个文件,其中包含原始文件中更改的文本吗?如果是这样,您想将其设为临时文件还是普通文件?
-
@Maxim Pontyushenko 是的,我想用整个新文件(已更改的文件)创建一个文件,但我不想写
-
我的其他方法使用“字符串”路径名的输入——这排除了 StringIO,因为 StringIO 没有路径名。 但我不想写--要创建文件,您必须写入文件。 Tempfile 只是为文件创建一个不会与任何现有文件名冲突的名称。如果您想在完成所有更改并打印出文件后删除 Tempfile,那么这就是要走的路。否则,您可以创建一个与原始文件同名的新文件,并在文件名末尾添加“已更改”之类的内容。但是....
-
...这最终可能会覆盖现有文件。为避免这种情况,您可以创建一个新目录并将新文件添加到其中。
标签: ruby memory temporary-files stringio