Это можно на ПЛК? На чтение и запись ("r" и "w") работает нормально, а на запись в конец файла("a") - не работает.
Это можно на ПЛК? На чтение и запись ("r" и "w") работает нормально, а на запись в конец файла("a") - не работает.
Это причуды стандартной библиотеки CoDeSys. Она понимает только r и w.
Открывайте с 'w', перемещайте указатель позиции в конец и дописывайте...
Тролль-наседка, добрый, нежный и ласковый
А разве открытие с "w" не очищает содержимое файла?
С чего бы это? Насколько я знаю, нет вообще в природе функций, очищающих файл без его стирания.
Тролль-наседка, добрый, нежный и ласковый
При открытии файла в режиме 'w' как перемещать указатель, у меня например не перемещается - функция возвращает ошибку. В примечаниях библиотеки сказано что доступны режимы открытия файла 'r' 'w' и 'rw'. Вопрос - насколько коректно работает режим 'rw' и в какой версии прошивки.
И можно фрагмент кода где реализована корректная дозапись файла, а то вроде сделано вроде работает, но регулярно косяки с файловой системой вылазят. О том что надо прошивку обновить знаю но пока работаю на 1.31.4
Последний раз редактировалось Andrey; 13.06.2007 в 14:10.
функция установки указателя работает в абсолютном режиме и если
операция прошла успешно, то возвращает 1, при ошибке - 0
режима 2, "r" и "w", "w" подразумевает и "r". Никакого режима "rw" не существует
вот что написано в библиотеке
FUNCTION SysFileOpen : DWORD
VAR_INPUT
FileName: STRING;
Mode: STRING [20]; (* Use 'w' (write), 'r' (read) or 'rw' (read and write) *)
END_VAR
VAR
END_VAR
Тогда что я делаю не правильно, у меня такой код не работает - предыдущие записи перетираются и остается последняя.
fln:STRING;
pF: DWORD;
buf:STRING(255);
Size: DWORD;
err:BOOL;
pF:=SysFileOpen(fln, 'w'); (*pF:=SysFileOpen(fln, 'rw'); а вот так работает *)
Size:=SysFileGetSize(fln);
err:=SysFileSetPos(pF,Size);
res:=SysFileWrite(pF, ADR(buf), LEN(buf));
err:=SysFileClose(pF);
Последний раз редактировалось Andrey; 13.06.2007 в 14:27.
Или может у меня не та версия библиотеки SysLibFile
Ну конечно этот код работать не будет так, как вы хотите!
1. err:=SysFileSetPos(pF,Size); - посылаете указатель за пределы файла (счет идет с нуля!)
2. Если вы пытаетесь открыть файл на запись во 2 раз, то он ПРИНУДИТЕЛЬНО будет открыт в режиме на чтение (начиная с прошивки 2.00.6)
Последний раз редактировалось Филоненко Владислав; 13.06.2007 в 14:40.
спасибо за ответ - попробую, но остается не понятно почему в режиме 'rw' все работает.