[win32] C file exists

Pagina: 1
Acties:

  • compie
  • Registratie: November 1999
  • Niet online
Wat is de juiste manier om met de win32 api te checken of een file bestaat?
Ik vind alleen maar visual basic code met google...

Ik kan met CreateFile proberen de file te openen en naar de return waarde kijken, maar welke parameters moet ik dan meegeven? Ik zie door de bomen het bos niet meer:

http://msdn.microsoft.com...ileio/base/createfile.asp

Verwijderd

Waarom de win32 api specifieke functies gebruiken? Dat helpt volgens mij alleen maar je portability om zeep...

C:
1
2
3
4
5
6
7
#include <sys/stat.h>
...
struct stat st;
int i;

i = stat("bestandje",&st);
printf("bestand bestaat %s!", i==0?"wel":"niet");

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

De handigste manier is via GetFileAttributes, daar hoef je alleen de filename aan mee te geven. Als die functie INVALID_FILE_ATTRIBUTES teruggeeft moet je in principe nog wel even de last error checken middels GetLastError(), als je namelijk ERROR_ACCESS_DENIED krijgt kan de file alsnog wel bestaan maar dat je gewoon geen rechten hebt op de directory :) Of dat voor jou applicatie verschillend is moet je zelf besluiten :)

Professionele website nodig?


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:44

Creepy

Tactical Espionage Splatterer

Zie ook http://msdn.microsoft.com...ml/_crt_file_handling.asp en http://msdn.microsoft.com..._management_functions.asp. Daar staat vast wel iets tussen (findfirstfile bijv.) :)

En blijkbaar heet de stat() functie volgens MS _stat() i.p.v. stat. :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Zoals curry al zei GetFileAttributes is de handigste. Je kunt dan namelijk meteen met de waarde FILE_ATTRIBUTE_DIRECTORY checken of er ook geen directory bestaat met die naam. Of met een van de andere attributen zie MSDN of het iets anders is wat je niet wilt hebben. GetFileAttributes is erg snel omdat die alleen maar de disk-index (FAT of wat dan ook) kijkt en niet naar het bestand zelf en die is meestal in het geheugen gecached.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
De beste manier is om niet de win32 API te gebruiken, tenminste als je C++ gebruikt
Boost::filesystem

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1