Page 1 of 2 1 2 LastLast
Results 1 to 15 of 16

Thread: Controleren of bestand bestaat WinApi

  1. #1
    TScriptKiddie DiGi-Ben's Avatar
    Join Date
    Oct 2004
    Location
    Beek (lb). Neth. Uses: Delphi 2005 Architect Uses: Delphi 2006 Architect
    Posts
    817

    Controleren of bestand bestaat WinApi

    In WinApi bestaat FileExists niet Hoe kan ik snel controleren of een bestand bestaat?

    De VCL doet het heel erg omslachtig.
    "Some are wise, some are otherwise."

  2. #2
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    FindFirstFile gebruiken; als je 0 terugkrijgt bestaat het bestand... (en vergeet FindClose niet)


    Edit: dit was dus niet correct, sorry
    Last edited by PsychoMark; 26-Jan-05 at 14:30.
    Qui custodiet ipsos custodes

  3. #3
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    En als ik het goed heb heb je vanaf Win2K een probleem als je FindClose aanroept terwijl je FindFirstFile iets anders dan 0 terugkrijgt
    !

  4. #4
    TScriptKiddie DiGi-Ben's Avatar
    Join Date
    Oct 2004
    Location
    Beek (lb). Neth. Uses: Delphi 2005 Architect Uses: Delphi 2006 Architect
    Posts
    817
    Hoe moet ik dat dan oplossen SvG?
    "Some are wise, some are otherwise."

  5. #5
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Code:
    function FileExists(const FileName: string): Boolean;
    var
      Handle: THandle;
      FindData: TWin32FindData;
    
    begin
      Handle := Windows.FindFirstFile(PChar(FileName), FindData);
      Result := (Handle <> INVALID_HANDLE_VALUE);
      if Result then
        Windows.FindClose(Handle);
    end;
    Qui custodiet ipsos custodes

  6. #6
    TScriptKiddie DiGi-Ben's Avatar
    Join Date
    Oct 2004
    Location
    Beek (lb). Neth. Uses: Delphi 2005 Architect Uses: Delphi 2006 Architect
    Posts
    817
    Ik wilde net posten dat ik het gevonden had
    "Some are wise, some are otherwise."

  7. #7
    Senior Member
    Join Date
    Dec 2001
    Location
    Rotterdam
    Posts
    219
    ...de code van FileAge overnemen en inkorten, inderdaad...
    Always code as if the person who ends up maintaining your code
    will be a violent psychopath who knows where you live.


    John F. Woods (quoted on Usenet) 1997/08/20

  8. #8
    TScriptKiddie DiGi-Ben's Avatar
    Join Date
    Oct 2004
    Location
    Beek (lb). Neth. Uses: Delphi 2005 Architect Uses: Delphi 2006 Architect
    Posts
    817
    Als het klopt wat SvG zegt, is je code verkeerd Psycho.

    Jouw code:
    Code:
    Result := (Handle <> INVALID_HANDLE_VALUE);
    Resulteert in True als Handle bestaat. Dus
    Code:
    if Result then
    Windows.FindClose(Handle);
    laat de app crashen (dat gebeurde bij mij).

    Dus dit zou het dan moeten zijn:
    Code:
    Result := (Handle = INVALID_HANDLE_VALUE);
    "Some are wise, some are otherwise."

  9. #9
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Als Handle INVALID_HANDLE_VALUE is dan bestaat het bestand niet, dus moet Result False worden en er geen FindClose aangeroepen worden... met jouw laatste code zal FileExists juist True teruggeven als het bestand niet bestaat...

    Crasht je applicatie echt op FindClose dan?
    Qui custodiet ipsos custodes

  10. #10
    TScriptKiddie DiGi-Ben's Avatar
    Join Date
    Oct 2004
    Location
    Beek (lb). Neth. Uses: Delphi 2005 Architect Uses: Delphi 2006 Architect
    Posts
    817
    Code:
    Result := (Handle <> INVALID_HANDLE_VALUE);
    Dit is jouw code. Result wordt True als Handle is niet INVALID_HANDLE_VALUE, dus hij wordt true als het bestand bestaat. SvG zegt dat het programma crasht als er FindClose wordt aangeroepen terwijl hij het bestand WEL gevonden heeft.

    En als ik het goed heb heb je vanaf Win2K een probleem als je FindClose aanroept terwijl je FindFirstFile iets anders dan 0 terugkrijgt
    Een van ons is dus in de war
    Ik neem aan dat FindFirstFile 0 is als er iets fout gaat.
    "Some are wise, some are otherwise."

  11. #11
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    SysUtils.FindFirst: als er 0 terug gegeven wordt bestaat het bestand wel
    Windows.FindFirstFile: als er INVALID_HANDLE_VALUE terug gegeven wordt bestaat het bestand niet

    ...SVG had het waarschijnlijk over de SysUtils variant. Het verschil is dat de API een Handle teruggeeft, en geen status (de SysUtils variant geeft bij een fout GetLastError terug, dit kan omdat de Handle opgeslagen wordt in TSearchRec). Mijn code blijft voorlopig dus correct; indien de Handle niet INVALID_HANDLE_VALUE is bestaat het bestand wel en moet dus ook FindClose aangeroepen worden...
    Qui custodiet ipsos custodes

  12. #12
    TScriptKiddie DiGi-Ben's Avatar
    Join Date
    Oct 2004
    Location
    Beek (lb). Neth. Uses: Delphi 2005 Architect Uses: Delphi 2006 Architect
    Posts
    817
    Ok, dat verklaart
    Ik vond het al raar.
    "Some are wise, some are otherwise."

  13. #13
    Senior Member
    Join Date
    Dec 2001
    Location
    Rotterdam
    Posts
    219
    F.Y.I:

    Uit de win32 help:
    If the function fails, the return value is INVALID_HANDLE_VALUE. To get extended error information, call GetLastError.
    En uit Windows.pas
    Code:
    const
      INVALID_HANDLE_VALUE = DWORD(-1);
    Always code as if the person who ends up maintaining your code
    will be a violent psychopath who knows where you live.


    John F. Woods (quoted on Usenet) 1997/08/20

  14. #14
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    Ik ga met mark mee

    Ik raak in de war omdat er eerst werd gezegt dat FindFirstFile 0 teruggeeft als het bestand bestaat.. Daarop zeg ik dat je findClose niet moet aanroepen als je iets anders dan 0 hebt gekregen
    !

  15. #15
    Maar dan nog. Het kan toch geen kwaad om FindClose aan te roepen? Ik kan me niet voorstellen dat dat problemen oplevert.
    1+1=b

Page 1 of 2 1 2 LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Controleren of Object bestaat
    By Bolus in forum Algemeen
    Replies: 4
    Last Post: 01-Nov-04, 23:25
  2. Controleren of een file open is
    By eagle00789 in forum Algemeen
    Replies: 4
    Last Post: 15-Jun-04, 12:34
  3. Replies: 3
    Last Post: 29-Nov-03, 11:03
  4. Veld op lege waarde controleren: .Text of .AsString
    By Hans Brenkman in forum Algemeen
    Replies: 4
    Last Post: 08-Nov-02, 11:28
  5. Rechten controleren voor schrijven in registry op W2000
    By Hans Brenkman in forum Koffiehoek
    Replies: 4
    Last Post: 21-Oct-02, 09:29

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •