metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-12-06 09:53 am

Епический стыд

Пытался написать прогу на хаскеле, которая читает файл, обрабатывает его и дописывает в его конец новую строку. Тут же напоролся на lazy i/o и то, что после hClose файл уже не читается, а до hClose файл нельзя открыть на запись. C readFile аналогично.

Кстате, что-то я в System.IO совсем не вижу вариаций openFile с ShareRead/ShareWrite, оно что ле вообще не предусмотрено?

[identity profile] permea-kra.livejournal.com 2009-12-06 11:20 am (UTC)(link)
ЭЭэ... Ребе, а вам точно надо писать в тот же самый файл? По хорошему, надо бы в соседний, а потом мувнуть.

System.Posix.IO ?

[identity profile] metaclass.livejournal.com 2009-12-06 11:44 am (UTC)(link)
Зависит от размера файла. Если это мелкий файл с текущим состоянием - то да, так и надо делать.
А вот если это лог изменения состояния начиная с времен царя гороха - то таки нужно дописывать в конец.

[identity profile] lionet.livejournal.com 2009-12-06 11:49 am (UTC)(link)
Ну так открывай два файловых дескриптора. Один на чтение файла, а другой на запись.

Что, Windows этого не умеет?

[identity profile] metaclass.livejournal.com 2009-12-06 11:55 am (UTC)(link)
Windows умеет, а вот Хаскель на ней - похоже нет:
http://hpaste.org/fastcgi/hpaste.fcgi/view?id=13672#a13672

check.exe: test: openFile: permission denied (Permission denied)

[identity profile] metaclass.livejournal.com 2009-12-06 12:24 pm (UTC)(link)
Кстати, System.Posix.IO - это где, в виндовом ghc его нету.

[identity profile] permea-kra.livejournal.com 2009-12-06 12:36 pm (UTC)(link)
unix package. В винде можно взять winio package, наверно...

По записи - в таком случае, по идее, таки ручками делать IO. В смысле, совсем ручками, через свой буфер. Или ковырять хакадж, там с высокой вероятностью что-то есть.