web-dev-qa-db-fra.com

Comment vérifier si un fichier existe ou non en utilisant le programme Win32?

Comment vérifier si un fichier existe ou non en utilisant un programme Win32? Je travaille pour une application Windows Mobile.

66
Krishnan

Vous pouvez appeler FindFirstFile .

Voici un échantillon que je viens de frapper:

#include <windows.h>
#include <tchar.h>
#include <stdio.h>

int fileExists(TCHAR * file)
{
   WIN32_FIND_DATA FindFileData;
   HANDLE handle = FindFirstFile(file, &FindFileData) ;
   int found = handle != INVALID_HANDLE_VALUE;
   if(found) 
   {
       //FindClose(&handle); this will crash
       FindClose(handle);
   }
   return found;
}

void _tmain(int argc, TCHAR *argv[])
{
   if( argc != 2 )
   {
      _tprintf(TEXT("Usage: %s [target_file]\n"), argv[0]);
      return;
   }

   _tprintf (TEXT("Looking for file is %s\n"), argv[1]);

   if (fileExists(argv[1])) 
   {
      _tprintf (TEXT("File %s exists\n"), argv[1]);
   } 
   else 
   {
      _tprintf (TEXT("File %s doesn't exist\n"), argv[1]);
   }
}
23
Preet Sangha

Utilisez GetFileAttributes pour vérifier que l'objet du système de fichiers existe et qu'il ne s'agit pas d'un répertoire.

BOOL FileExists(LPCTSTR szPath)
{
  DWORD dwAttrib = GetFileAttributes(szPath);

  return (dwAttrib != INVALID_FILE_ATTRIBUTES && 
         !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
}

Copié de Comment vérifiez-vous si un répertoire existe sous Windows en C?

190
Zach Burlingame

Vous pouvez utiliser la fonction GetFileAttributes . Il renvoie 0xFFFFFFFF si le fichier n'existe pas.

32
codaddict

Que diriez-vous simplement:

#include <io.h>
if(_access(path, 0) == 0)
    ...   // file exists
16
Pierre

Une autre option: 'PathFileExists' .

Mais j'irais probablement avec GetFileAttributes.

7
Adrian McCarthy

Vous pouvez essayer d'ouvrir le fichier. S'il échoue, cela signifie qu'il n'existe pas la plupart du temps.

1
fanzhou