На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
  
> Дозапись файла записей
    У меня имеется файл-записей. Я хочу в него дописать ещё запись. Append здесь отдыхает, так как файл не текстовый. Можно ли сделать seek(f,filesize(f)), что тем самым мы перейдем на конечный компонент? Или есть другие способы?
      Так ты перейдешь на конец файла. Нельзя в принципе, потому что,
      Цитата
      Rewrite creates a new external file with the name assigned to F. If an
      external file with the same name already exists, it is deleted and a new
      empty file is created in its place. If F is already open, it is first closed
      and then re-created. The current file position is set to the beginning of
      the empty file.
        Цитата Brain @
        Можно ли сделать seek(f,filesize(f)), что тем самым мы перейдем на конечный компонент

        Можно :)

        Добавлено
        Хм, тормознул, низзя.
          Если файл обьявлен как типизированный то можно

          Добавлено
          И это самый простой вариант

          -юсртыхэю
          Цитата Оззя @
          Так ты перейдешь на конец файла.

          Так ему это и надо
            Если нетипизированный - можно сделать свои функции ввода/вывода через прерывания DOS. Это не долго.
              Если он работает с записями - прямая дорога к типизированному файлу
                Damirjano
                Ему нужно добавить в существующий файл.
                Который будет удален (ReWrite так работает) и создан заново и в него будет записаны записи заново.
                Записали в файл 2 записи
                ExpandedWrap disabled
                  type
                    Date   = record
                       D, M, Y: Integer;
                    end;
                  var
                    F: File Of Date;
                    aDate: Date;
                  begin
                    Assign(F, 'TEST.dat');
                    Rewrite(F);
                    With aDate do
                      begin
                        d:=10;
                        m:=2;
                        y:=1999;
                      end;
                    Write(F, aDate);
                    Write(F, aDate);
                    Close(F);   { Close file, save changes }
                    Readln;
                  end.

                Все ок, в файле 2 записи.

                Открыли существующий, пытаемся добавить в конец файла
                ExpandedWrap disabled
                  type
                    Date   = record
                       D, M, Y: Integer;
                    end;
                  var
                    F: File Of Date;
                    aDate: Date;
                  begin
                    Assign(F, 'TEST.dat');
                    Rewrite(F);   { Create new file }
                    With aDate do
                      begin
                        d:=10;
                        m:=2;
                        y:=1999;
                      end;
                    Seek(F, FileSize(F));
                    Write(F, aDate);
                    Close(F);   { Close file, save changes }
                    Readln;
                  end.

                Оп! В файле 1 запись.
                  А какого X.. использовать REWRITE !!!!!!

                  Надо использовать RESET !!!!

                  ExpandedWrap disabled
                    Reset ( procedure)
                    Opens an existing file


                  Цитата из HELPa
                    Damirjano
                    Пора мне на покой, похоже. Старею. :wall:
                    Конечно, ReSet

                    Добавлено
                    Риторический вопрос:
                    Почему у меня в голове закрепилось, что ReWrite - только для записи, а ReSet - только для чтения? :lool:
                      Хм. Вот, написал кое-что:

                      ExpandedWrap disabled
                        type
                        {file handle}
                          HFILE = Word;
                         
                        {seek mode}
                          TSeekMode = (FILE_BEGIN, FILE_CURRENT, FILE_END);
                         
                        {open mode}
                          TOpenMode = (FILE_READ, FILE_WRITE, FILE_READWRITE);
                         
                        const
                          file_name = 'G:\test.bin'+#0;
                         
                        {file attributes}
                          FA_NORMAL    = $00;
                          FA_READ_ONLY = $01;
                          FA_HIDDEN    = $02;
                          FA_SYSTEM    = $04;
                          FA_ARCHIVE   = $20;
                         
                        var
                          h: HFILE;
                          a: string;
                         
                        function CreateFile(szFileName: PChar; wAttr: Word): HFILE; assembler;
                        asm
                          push dx
                          push cx
                          push ds
                          mov  ax,[bp+8]
                          mov  ds,ax
                          mov  ah,03Ch
                          mov  cx,wAttr
                          mov  dx,di
                          int  21h
                          jnc  @@exit
                          xor  ax,ax
                        @@exit:
                          pop  ds
                          pop  cx
                          pop  dx
                        end;
                         
                        function OpenFile(szFileName: PChar; wMode: TOpenMode): HFILE; assembler;
                        asm
                          push dx
                          push ds
                          mov  ax,[bp+8]
                          mov  ds,ax
                          mov  ah,040h
                          mov  dx,[bp+6]
                          mov  ah,03Dh
                          mov  al,wMode
                          int  21h
                          jnc  @@exit
                          xor  ax,ax
                        @@exit:
                          pop  ds
                          pop  dx
                        end;
                         
                        function SeekFile(h: HFILE; LoOffset, HiOffset: Word;
                          wMode: TSeekMode): Word; assembler;
                        asm
                          push dx
                          push cx
                          push bx
                          mov  ah,042h
                          mov  al,wMode
                          mov  cx,HiOffset
                          mov  dx,LoOffset
                          mov  bx,h
                          int  21h
                          pop  bx
                          pop  cx
                          pop  dx
                        end;
                         
                        function ReadFile(h: HFILE; pBuf: Pointer; wBytesCount: Word): Word;
                          assembler;
                        asm
                          push dx
                          push cx
                          push bx
                          push ds
                          mov  ax,word [bp+4]
                          mov  ds,ax
                          mov  ah,03Fh
                          mov  dx,[bp+2]
                          mov  cx,wBytesCount
                          mov  bx,h
                          int  21h
                          pop  ds
                          pop  bx
                          pop  cx
                          pop  dx
                        end;
                         
                        function WriteFile(h: HFILE; pBuf: Pointer; wBytesCount: Word): Word;
                          assembler;
                        asm
                          push dx
                          push cx
                          push bx
                          push ds
                          mov  ax,[bp+8]
                          mov  ds,ax
                          mov  ah,040h
                          mov  dx,[bp+6]
                          mov  cx,wBytesCount
                          mov  bx,h
                          int  21h
                          pop  ds
                          pop  bx
                          pop  cx
                          pop  dx
                        end;
                         
                        procedure CloseFile(h: HFILE); assembler;
                        asm
                          push bx
                          mov  ax,03E00h
                          mov  bx,h
                          int  21h
                          pop  bx
                        end;
                         
                        procedure DeleteFile(szFileName: PChar); assembler;
                        asm
                          push dx
                          push ds
                          mov  ax,[bp+6]
                          mov  ds,ax
                          mov  dx,[bp+4]
                          mov  ax,04100h
                          int  21h
                          pop  ds
                          pop  dx
                        end;
                         
                        begin
                          h:=OpenFile(file_name, FILE_READWRITE);
                          if (h <> 0) then
                            begin
                              a:='Hello, world!';
                              SeekFile(h, 0, 0, FILE_END);
                              WriteFile(h, @a[1], Length(a));
                              CloseFile(h);
                            end;
                        end.


                      Добавлено
                      Цитата Оззя @
                      Риторический вопрос:
                      Почему у меня в голове закрепилось, что ReWrite - только для записи, а ReSet - только для чтения

                      Потому что так было, есть и будет :)
                      Сообщение отредактировано: Ct757 -
                        Оззя, я так понимаю стереотип... раз можно читать, значит только для чтения ;)

                        Ct757, асмовые процедуры конечно вещь, но они в данной ситуации просто не нужны...
                          Vesper, да, че-то я разогнался. Reset открывает в режиме read only, только если файл текстовый :)
                            Огромное спасибо всем! Разобрался. Вопрос решён.
                              Цитата Ct757 @
                              ... да, че-то я разогнался. Reset открывает в режиме read only, только если файл текстовый...

                              Или если system.filemode установлена в 0! :tong:
                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0376 ]   [ 15 queries used ]   [ Generated: 25.04.24, 11:41 GMT ]