Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 25

Тема: Открытие файла на дозапись.

  1. #1

    По умолчанию Открытие файла на дозапись.

    Это можно на ПЛК? На чтение и запись ("r" и "w") работает нормально, а на запись в конец файла("a") - не работает.

  2. #2

    По умолчанию

    Это причуды стандартной библиотеки CoDeSys. Она понимает только r и w.
    Открывайте с 'w', перемещайте указатель позиции в конец и дописывайте...
    Тролль-наседка, добрый, нежный и ласковый

  3. #3

    По умолчанию

    А разве открытие с "w" не очищает содержимое файла?

  4. #4

    По умолчанию

    С чего бы это? Насколько я знаю, нет вообще в природе функций, очищающих файл без его стирания.
    Тролль-наседка, добрый, нежный и ласковый

  5. #5

    По умолчанию

    При открытии файла в режиме 'w' как перемещать указатель, у меня например не перемещается - функция возвращает ошибку. В примечаниях библиотеки сказано что доступны режимы открытия файла 'r' 'w' и 'rw'. Вопрос - насколько коректно работает режим 'rw' и в какой версии прошивки.
    И можно фрагмент кода где реализована корректная дозапись файла, а то вроде сделано вроде работает, но регулярно косяки с файловой системой вылазят. О том что надо прошивку обновить знаю но пока работаю на 1.31.4
    Последний раз редактировалось Andrey; 13.06.2007 в 14:10.

  6. #6

    По умолчанию

    функция установки указателя работает в абсолютном режиме и если
    операция прошла успешно, то возвращает 1, при ошибке - 0

    режима 2, "r" и "w", "w" подразумевает и "r". Никакого режима "rw" не существует

  7. #7

    По умолчанию

    вот что написано в библиотеке
    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.

  8. #8

    По умолчанию

    Или может у меня не та версия библиотеки SysLibFile

  9. #9

    По умолчанию

    Ну конечно этот код работать не будет так, как вы хотите!

    1. err:=SysFileSetPos(pF,Size); - посылаете указатель за пределы файла (счет идет с нуля!)
    2. Если вы пытаетесь открыть файл на запись во 2 раз, то он ПРИНУДИТЕЛЬНО будет открыт в режиме на чтение (начиная с прошивки 2.00.6)
    Последний раз редактировалось Филоненко Владислав; 13.06.2007 в 14:40.

  10. #10

    По умолчанию

    спасибо за ответ - попробую, но остается не понятно почему в режиме 'rw' все работает.

Страница 1 из 3 123 ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •