Tôi đang cố gắng đọc một tập tin mp3 đầy đủ để đọc các thẻ id3. Đó là khi tôi nhận thấy rằng tập tin: đọc ("* a") dường như không đọc tập tin đầy đủ mà là một phần nhỏ. Vì vậy, tôi đã cố gắng để xây dựng một số loại workaround để có được nội dung của toàn bộ file:Đọc toàn bộ tập tin trong Lua
function readAll(file)
local f = io.open(file, "r")
local content = ""
local length = 0
while f:read(0) ~= "" do
local current = f:read("*all")
print(#current, length)
length = length + #current
content = content .. current
end
return content
end
cho testfile của tôi, điều này cho thấy rằng 256 hoạt động đọc được thực hiện, đọc tổng cộng ~ 113kB (toàn bộ tập tin là ~ 7MB). Mặc dù điều này là đủ để đọc hầu hết các thẻ id3, tôi tự hỏi tại sao Lua cư xử theo cách này (đặc biệt là bởi vì nó không khi đọc các tệp văn bản lớn như * .oj hoặc * .ase). Có bất kỳ lời giải thích nào cho hành vi này hoặc có thể là một giải pháp để đọc một cách đáng tin cậy toàn bộ tập tin?
Bạn đang ở trên cửa sổ? đảm bảo rằng bạn mở tệp ở chế độ nhị phân ("rb" thành io.open) – daurnimator
Argh, đó là vấn đề. Không bao giờ phải sử dụng chế độ nhị phân trước đây. Cảm ơn bạn rất nhiều! –
Ai đó có thể giải thích định dạng *** tất cả ** trong hàm 'f: read (" * all ")'? Có vẻ như "* tất cả" bằng "* a"? Tôi không thể tìm thấy tài liệu trong hướng dẫn sử dụng lua https://www.lua.org/manual/5.1/manual.html#pdf-file:read –