2016-11-04 33 views
0

因此,如果我用Elixir在RAM內存(見下面的代碼2)中打開一個文件,我該如何在RAM中寫入該文件,然後在寫入完成後檢索其內容?模式匹配返回「#Port < 0.11114>」,這是不一樣的文件句柄PID顯然是IO.write #Port < 0.11114>,「你好」返回一個錯誤,例如:如何在elixir的RAM中寫入文件?

代碼1

** (CaseClauseError) no case clause matching: {#Port<0.11114>} 
    (elixir) lib/io.ex:495: IO.write/2 

代碼2

File.open("text.txt", [:ram]) 
# => {:ok, {:file_descriptor, :ram_file, #Port<0.11114>}} 
+0

你介意分享產生錯誤的代碼嗎? – mudasobwa

+0

說你需要寫_ram_罷工我可能是過早的優化。 –

+0

@OnorioCatenacci - 它不是,我想我必須寫信給ram,因爲它是在一個不允許存儲文件的Heroku盒子上完成的(寫入他們臨時存儲的文件將被擦除) – Nona

回答

1

好了,所以這應該爲你工作:

{:ok, file} = File.open("text.txt",[:ram, :write]) 
IO.binwrite(file,"This is a test") 

需要注意的是,如果我沒有通過在File.open呼叫:write原子,我得到一個錯誤:ebadf當我嘗試寫入文件。