Ошибка чтения и записи файла Lua - PullRequest
1 голос
/ 15 мая 2011

Извините, если уже есть такая тема, но я не смог найти ни одной, имеющей какое-либо отношение к Lua ... Итак, у меня, в принципе, есть некоторые проблемы при написании и чтении файлов, вот что я сделал:

hp = 25

file = io.open("player.txt","w")
if file==nil then
    io.output("player.txt")
    io.close()
end
file:write(hp)
file:close()

и, кажется, работает нормально, просто идеально ... но потом, когда я пытаюсь добавить файл: напишите (hp) внутри предложения if, это не сработает.Также, если я добавлю file: read ("* line") сразу после file: write (hp), это то, что написано в player.txt:

25b[NUL]ÈñZ[NUL]
file = io.open("player.txt","w")

Так что я делаю не так?Также [NUL] - это черный блок с белым текстом «NUL» в блокноте ++, но его нельзя скопировать здесь.

Edit : Хммх, похоже, весь код испорчен,до него всегда переписывается весь файл; o

Edit2 : На самом деле я понятия не имел, о чем я говорю, в настоящее время я могу немного больше понять управление файлами, вот что должно было быть иличто я пытался сделать:

function existsFile(path)
    x = io.open(path)
    if x == nil then
        io.close()
        return false
    else
        x:close()
        return true
    end
end

if not existsFile("player.txt") then
    file = io.open("player.txt", "w")
    file:write(25)
    hp = 25
    file:close()
else
    file = io.open("player.txt", "r")
    hp = file:read("*number")
    file:close()
end

И я знаю, что это похоже на код, который я впервые опубликовал, но именно это я и имел в виду.

Ответы [ 3 ]

1 голос
/ 15 мая 2011

Не могли бы вы объяснить, что вы пытаетесь сделать в этом коде? Зачем вам нужно проверять, имеет ли файл ноль? Когда вы открываете файл для записи, lua автоматически создает его, если он не существует. Режим "w" означает, что вы стираете все данные в файле и пишете новые данные Может быть, вам нужен режим "а"? В этом режиме новые строки добавляются в конец файла.

0 голосов
/ 16 мая 2011

Блок «if» проверяет, имеет ли «file» значение «nil», поэтому блок кода никогда не запустится.

read () не работает, поскольку вы открыли файл в режиме «w» (запись).

Удаление всего файла - ожидаемое поведение режима записи.В этом режиме файл сначала удаляется, а затем вы записываете в него новые данные.

0 голосов
/ 15 мая 2011

Звучит так, будто вы запутались в флагах на io.open . Проверьте руководство, чтобы убедиться, что вы действительно хотите флаг w, поскольку он перезаписывает все.

Попытка сделать file:write, когда вы находитесь в if, не должна работать, и я не уверен, почему вы ожидаете этого, поскольку file - это nil. Вы говорите, что если файл не может быть открыт, попробуйте записать это в файл, что не имеет смысла для меня.

...