2017-05-03 13 views
5

एलिक्सीर (या एरलांग) में, अगर मेरे पास एक मेमोरी फ़ाइल है, तो मैं इसकी लंबाई बाइट्स में कैसे पा सकता हूं?स्मृति फ़ाइल में एलिक्सीर/एरलांग की लंबाई खोजें?

{:ok, fd} = :file.open("", [:ram, :read, :write]) 
:file.write(fd, "hello") 

उत्तर

2

सुनिश्चित नहीं हैं कि वहाँ एक बेहतर तरीका है, लेकिन यह मैं क्या किया है अगर:

def get_length(fd) do 
    {:ok, cur} = :file.position(fd, {:cur, 0}) 
    try do 
    :file.position(fd, {:eof, 0}) 
    after 
    :file.position(fd, cur) 
    end 
end 

उपयोग:

{:ok, fd} = :file.open("", [:ram, :read, :write]) 
:ok = :file.write(fd, "hello") 
{:ok, len} = get_length(fd) 
3

आप उपयोग कर सकते हैं :ram_file.get_size/1:

iex(1)> {:ok, fd} = :file.open("", [:ram, :read, :write]) 
{:ok, {:file_descriptor, :ram_file, #Port<0.1163>}} 
iex(2)> :file.write(fd, "hello") 
:ok 
iex(3)> :ram_file.get_size(fd) 
{:ok, 5} 
iex(4)> :file.write(fd, ", world!") 
:ok 
iex(5)> :ram_file.get_size(fd) 
{:ok, 13} 
+1

यह बहुत साफ है, लेकिन पता है कि 'हो: किसी भी समय/हटाने को बदलने के लिए ram_file' मॉड्यूल आधिकारिक तौर पर OTP में है और इसलिए विषय undocumented है (। यह मूल रूप से एक राम फ़ाइल है) यहाँ एक उदाहरण है। – jwfearn

1

यदि आप इलीक्सिर का उपयोग कर रहे हैं, तो आपका भी उपयोग कर सकते हैं I44 उपकरणों के रूप में तारों का इलाज करने के लिएमॉड्यूल।

# create ram file 
{:ok, pid} = StringIO.open("") 

# write to ram file 
IO.write(pid, "foo") 
IO.write(pid, "bar") 

# read ram file contents 
{_, str} = StringIO.contents(pid) 

# calculate length 
str |> byte_size  |> IO.inspect # number of bytes 
str |> String.length |> IO.inspect # number of Unicode graphemes 
+0

धन्यवाद @ जेसन-तु! मेरे मामले में, मुझे मौजूदा कोड के साथ काम करना है जो Erlang ': RAM 'फ़ाइलों का उपयोग कर रहा है। – jwfearn

संबंधित मुद्दे