На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Есть ли на диске файл с данным именем? , Разные способы это узнать
    Как узнать есть ли на диске файл с данным именем?
    Вариант вроде етого мне ненравиться, из-за лишних действий.
    ExpandedWrap disabled
      function est_takoe_file(fname:string):boolean;
      var F:file of byte;
        t:byte;
      begin
        assign(F,Fname);
        reset(F);
        {I-}
        read(F,t);
        if IOresult=0 then est_takoe_file:=true{File вполне съедобное}
        else est_takoe_file:=false; {такое File  есть нельзя}
        {I+}
        close(F);
      end;
      А FindFirst из юнита Dos, стало быть, не подходит?
        2Mixxx
        Опиши эту функцию в каком-нибудь модуле, откомпиль и вызывай всегда из других проектов. Так ты скоро про неё забудешь даже, потому что в программе она у тебя светиться не будет.
          Цитата
          А  FindFirst из юнита Dos, стало быть, не подходит?

          А друго-го способа нету?
          Сообщение отредактировано: Some1 -
            Цитата
            2Mixxx  
            Опиши эту функцию в каком-нибудь модуле, откомпиль и вызывай всегда из других проектов. Так ты скоро про неё забудешь даже, потому что в программе она у тебя светиться не будет.

            Т.е.
            C глаз долой - из сердца вон! >:(
            ИМХО: Это плохая идея.
            Сообщение отредактировано: Some1 -
              Цитата (Mixxx @ 12.07.03, 17:27:13)

              А друго-го способа нету?

              Еще, например, какое-то прерывание есть…
              Сообщение отредактировано: Some1 -
                Цитата
                Еще, например, какое-то прерывание есть…

                И как к нему обратиться?
                Сообщение отредактировано: Some1 -
                  http://www.codenet.ru/progr/dos/int_0026.php
                  Сообщение отредактировано: Some1 -
                    АААааа, еггог! reset(f) если файла нет, выдаст runtime error 100, потому как контроль ввода-вывода еще включен. А надо вот как:
                    ExpandedWrap disabled
                      assign(f,fname);
                      {$i-}
                      reset(f);
                      close(f);
                      {$i+}
                      est_takoe_file:=ioresult=0;
                      ExpandedWrap disabled
                        {*--- From mailserver by Valery Votintsev ---*}
                        function FileExists(FileName: string): Boolean;
                        { Returns True if file exists; otherwise, it returns False }
                        var
                            DirInfo: SearchRec;
                        begin
                           FindFirst(Filename, Archive, DirInfo);
                           FileExists:=(DosError = 0);
                           DosError:=0;
                        end;  { FileExists }
                        А FindClose разве делать не надо?
                          Нет, не надо.
                          Это же не Дельфи, а Борланд Паскаль  :)
                            Не проще будет составить модуль со своими функциями и данную назвать:
                            function FileExist(FileName: string): boolean;
                            И потом писать:
                            uses MyFiles
                            ....
                            if FileExist('proba.pas') then...

                            А юзать для неё (правильно тебе сказали) - FindFirst... ;D
                            Сообщение отредактировано: Some1 -
                              Цитата (Сахаров Сергей @ 20.08.03, 05:54:47)
                              А юзать для неё (правильно тебе сказали) - FindFirst... ;D

                              А если есть каталог с таким именем? FindFirst скажет, что такой есть, а на Reset RuntimeError словишь! Надо либо проверять, не каталог ли нам FindFirst вернула, либо делать через Assign/Reset. Тока не повторяйте ошибки первого примера: файл надо закрывать только если он открылся smile.gif
                              Сообщение отредактировано: Some1 -
                                FindFirst не скажет, что есть каталог, если в атрибутах не указано Directory.
                                Если тебе нужны длинные имена, можешь попробовать вот это:

                                ExpandedWrap disabled
                                  Var
                                     lngDosError: Word;
                                  { Результат последней операции с длинными именами }
                                  { Эту  переменную  следует  проверять  после  использовании процедур или }
                                  { функций  данного  модуля.  После использовании процедур/функций других }
                                  { модулей  (например, System или Dos) следует проверять код ошибки через }
                                  { переменные соответствующих модулей!                                    }
                                   
                                  Const
                                     lngSubstedPaths: Boolean = True;
                                  { Данная  переменная  используется функциями lngTrueName, lngShortName и }
                                  { lngLongName.  Если  значение  переменной = FALSE, то функции возращают }
                                  { физический  путь к файлу, если он находится на Subst-диске, если TRUE, }
                                  { то возвращается виртуальный путь к файлу.                              }
                                   
                                  {$S-}
                                  Procedure LString2ASCIIZ; assembler;
                                  Asm { DS:SI = LString; ES:DI = Buffer for ASCIIZ }
                                     cld
                                     push si
                                     push di
                                     lodsb
                                     xor ah,ah
                                     mov cx,ax
                                     rep movsb
                                     xchg ax,cx
                                     stosb
                                     xchg ax,cx
                                     pop di
                                     pop si
                                  End; { DS:SI = LString; ES:DI = ASCIIZ; AX = Length; CX is destroyed }
                                   
                                  {$S-}
                                  Procedure ASCIIZ2LString; assembler;
                                  Asm { DS:SI = ASCIIZ; ES:DI = Buffer for LString }
                                     cld
                                     mov cx,255
                                     xor ax,ax
                                     repne scasb
                                     std
                                     jnz @
                                     inc cx
                                     cmpsb
                                   @:not cx
                                     xor ch,ch
                                     mov ax,cx
                                     add si,ax
                                     rep movsb
                                     stosb
                                     cld
                                     cmpsb
                                  End; { DS:SI = ASCIIZ; ES:DI = LString; AX = Length; CX is destroyed }
                                   
                                  {$S+}
                                  Function TrueNameFunction(const Name: String): String; assembler;
                                  Var ASCIIZ: array [0..260] of Char;
                                  Asm
                                     push ds
                                     mov ch,lngSubstedPaths
                                     or ch,ch
                                     jz @NotSubsted
                                     mov ch,80h
                                   @NotSubsted:
                                     push cx
                                     lds si,Name
                                     push ss
                                     pop es
                                     lea di,ASCIIZ
                                     call LString2ASCIIZ
                                     mov ax,7160h
                                     pop cx
                                     push ss
                                     pop ds
                                     mov si,di
                                     les di,@Result
                                     stc
                                     int 21h
                                     jnc @Ok
                                     mov byte ptr es:[di],0
                                     jmp @Error
                                   @Ok:
                                     mov si,di
                                     call ASCIIZ2LString
                                     xor ax,ax
                                   @Error:
                                     pop ds
                                     mov lngDosError,ax
                                  End;
                                   
                                  {$S-}
                                  Function lngTrueName(const Name: String): String; assembler;
                                  { Получить полное имя файла Name (аналогично функции FExpand модуля DOS) }
                                  { Значение переменной lngSubstedPaths учитывается (см. комментарии)      }
                                  Asm
                                     xor cl,cl
                                     jmp TrueNameFunction+3
                                  End;
                                   
                                  {$S-}
                                  Function lngShortName(const LongName: String): String; assembler;
                                  { Получить полное короткое имя _существующего_ файла }
                                  { Значение переменной lngSubstedPaths учитывается... }
                                  Asm
                                     mov cl,1
                                     jmp TrueNameFunction+3
                                  End;
                                   
                                  {$S-}
                                  Function lngLongName(const ShortName: String): String; assembler;
                                  { Получить полное длинное имя _существующего_ файла  }
                                  { Значение переменной lngSubstedPaths учитывается... }
                                  Asm
                                     mov cl,2
                                     jmp TrueNameFunction+3
                                  End;
                                   
                                  Var
                                     F: File;
                                     S: String;
                                  Begin
                                     S := ParamStr(1);
                                     If S = '' then
                                     Begin
                                       WriteLn('Необходимо задать имя файла!');
                                       Halt
                                     End;
                                     S := lngShortName(S);
                                     If S <> '' then
                                     Begin
                                        FileMode := 0;  { Чтоб открывались ReadOnly-файлы }
                                        {$I-}
                                        Assign(F, S);
                                        Reset(F);
                                        {$I+}
                                        If IOResult = 0 then
                                        Begin
                                           Close(F);
                                           WriteLn('Файл найден!')
                                        End
                                        else WriteLn('Файл не открывается или это каталог!')
                                     End
                                     else WriteLn('Файл НЕ найден!')
                                  End.

                                p.s. Если что-то захочешь сказать/спросить - пиши в приват, т.к. здесь очень редко бываю.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0469 ]   [ 15 queries used ]   [ Generated: 20.02.24, 22:59 GMT ]